debugpy 1.8.5__zip → 1.8.7__zip
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {debugpy-1.8.5/src/debugpy.egg-info → debugpy-1.8.7}/PKG-INFO +1 -1
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_calltip_util.py +19 -21
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_completer.py +30 -30
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_execfile.py +3 -1
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_filesystem_encoding.py +43 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_getopt.py +35 -32
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_imports_tipper.py +83 -84
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_jy_imports_tipper.py +92 -99
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_log.py +2 -3
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_saved_modules.py +51 -27
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_sys_patch.py +11 -7
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_tipper_common.py +6 -5
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/fsnotify/__init__.py +34 -38
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_console_utils.py +71 -69
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_import_hook.py +1 -3
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_imports.py +0 -1
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_ipython_console.py +14 -16
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_ipython_console_011.py +81 -93
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_is_thread_alive.py +3 -3
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_localhost.py +9 -8
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_log.py +33 -25
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_monkey.py +183 -170
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_monkey_qt.py +33 -29
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_override.py +6 -4
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_umd.py +19 -18
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_versioncheck.py +3 -3
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles.py +165 -138
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_coverage.py +77 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_nose.py +35 -36
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_parallel.py +22 -23
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_parallel_client.py +37 -57
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_pytest2.py +54 -52
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_unittest.py +28 -37
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_xml_rpc.py +56 -53
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/__main__pydevd_gen_debug_adapter_protocol.py +604 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/debugProtocol.json +551 -445
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_base_schema.py +25 -29
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema.py +17458 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema_log.py +11 -12
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevconsole_code.py +18 -19
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info.py +41 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info_regular.py +328 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_api.py +263 -214
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_breakpoints.py +7 -10
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_bytecode_utils.py +187 -92
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_bytecode_utils_py311.py +105 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_code_to_source.py +46 -51
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_collect_bytecode_info.py +239 -176
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_comm.py +370 -297
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_comm_constants.py +78 -86
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_command_line_handling.py +55 -59
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_concurrency_analyser/pydevd_concurrency_logger.py +194 -58
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_concurrency_analyser/pydevd_thread_wrappers.py +2 -3
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_console.py +18 -23
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_constants.py +159 -127
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_custom_frames.py +10 -12
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.c +55527 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.pxd +15 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.pyx +803 -511
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython_wrapper.py +18 -7
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_daemon_thread.py +32 -24
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_defaults.py +11 -13
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_dont_trace.py +16 -16
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_dont_trace_files.py +27 -2
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_exec2.py +1 -1
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_extension_api.py +4 -5
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_extension_utils.py +8 -10
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_filtering.py +50 -45
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_frame.py +462 -407
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_frame_utils.py +69 -61
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_gevent_integration.py +14 -16
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_import_class.py +27 -25
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_io.py +40 -42
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_json_debug_options.py +200 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command.py +20 -19
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command_factory_json.py +199 -108
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command_factory_xml.py +121 -73
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_plugin_utils.py +208 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_process_net_command.py +206 -159
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_process_net_command_json.py +346 -334
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_referrers.py +75 -80
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_reload.py +35 -35
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_resolver.py +116 -124
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py +44 -58
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_safe_repr.py +51 -55
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_save_locals.py +4 -2
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_signature.py +24 -24
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_source_mapping.py +19 -20
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_stackless.py +45 -49
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_suspended_frames.py +61 -58
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_thread_lifecycle.py +23 -13
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_timeout.py +29 -31
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_dispatch.py +41 -11
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_dispatch_regular.py +117 -55
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_traceproperty.py +11 -14
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_utils.py +90 -89
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_vars.py +106 -97
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_vm_type.py +40 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_xml.py +56 -46
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_eval_cython_wrapper.py +5 -5
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_eval_main.py +71 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_evaluator.c +11165 -5326
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_tracing.py +5 -6
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_modify_bytecode.py +53 -56
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/__init__.py +1 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/bytecode.py +4 -6
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/cfg.py +6 -26
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/concrete.py +7 -21
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/flags.py +5 -24
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/instr.py +10 -34
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/peephole_opt.py +1 -4
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/__init__.py +2 -6
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_bytecode.py +3 -5
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_cfg.py +11 -31
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_code.py +2 -2
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_concrete.py +14 -41
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_flags.py +2 -4
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_instr.py +7 -18
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_misc.py +6 -18
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_peephole_opt.py +7 -18
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/util_annotation.py +1 -3
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/pydevd_fix_code.py +14 -19
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring.py +1929 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.c +43253 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.pxd +46 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.pyx +1935 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/pydevd_sys_monitoring.py +16 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_app_engine_debug_startup.py +12 -11
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_coverage.py +30 -32
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhook.py +58 -54
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookglut.py +20 -24
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookgtk.py +8 -7
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookgtk3.py +8 -6
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookpyglet.py +11 -8
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookqt4.py +21 -18
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookqt5.py +17 -15
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookqt6.py +17 -15
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhooktk.py +6 -4
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookwx.py +14 -10
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/matplotlibtools.py +30 -26
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydev_ipython/qt.py +24 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/qt_for_kernel.py +37 -34
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/qt_loaders.py +86 -73
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/version.py +7 -7
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydev_pysrc.py +1 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_run_in_console.py +23 -24
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydev_sitecustomize/sitecustomize.py +267 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevconsole.py +55 -47
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd.py +732 -508
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_always_live_program.py +40 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_check.py +1 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_test_attach_to_process.py +11 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_test_attach_to_process_linux.py +75 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/add_code_to_python_process.py +130 -125
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_amd64.dll +0 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_amd64.pdb +0 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_pydevd.py +89 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_script.py +41 -32
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86.dll +0 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86.pdb +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_utils.hpp +1 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_version.hpp +9 -1
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_amd64.exe +0 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_amd64.pdb +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_x86.exe +0 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_x86.pdb +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/lldb_prepare.py +10 -9
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.dll +0 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.pdb +0 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.dll +0 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.pdb +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/__init__.py +103 -119
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/breakpoint.py +457 -516
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/compat.py +33 -15
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/crash.py +336 -281
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/debug.py +101 -131
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/disasm.py +148 -153
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/event.py +310 -302
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/interactive.py +235 -208
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/module.py +185 -218
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/process.py +428 -564
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/registry.py +54 -53
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/search.py +69 -73
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/sql.py +158 -170
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/system.py +143 -213
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/textio.py +302 -333
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/thread.py +220 -239
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/util.py +198 -177
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/__init__.py +11 -11
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/advapi32.py +1191 -713
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/context_amd64.py +248 -194
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/context_i386.py +132 -120
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/dbghelp.py +450 -346
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/defines.py +305 -286
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/gdi32.py +526 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/kernel32.py +1479 -1097
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/ntdll.py +579 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/peb_teb.py +3517 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/psapi.py +54 -31
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/shell32.py +170 -149
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/shlwapi.py +190 -108
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/user32.py +542 -437
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/version.py +489 -442
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/wtsapi32.py +83 -65
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/window.py +70 -76
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/attach.cpp +17 -9
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/compile_windows.bat +1 -1
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_file_utils.py +141 -120
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/__init__.py +1 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/django_debug.py +175 -149
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/__init__.py +1 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/__init__.py +1 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_helpers.py +5 -5
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugin_numpy_types.py +28 -28
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugin_pandas_types.py +22 -30
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugins_django_form_str.py +3 -2
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/jinja2_debug.py +130 -108
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/pydevd_line_validation.py +27 -14
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_tracing.py +85 -66
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/setup_pydevd_cython.py +96 -59
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_version.py +3 -3
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/messaging.py +2 -1
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/server/cli.py +32 -17
- {debugpy-1.8.5 → debugpy-1.8.7/src/debugpy.egg-info}/PKG-INFO +1 -1
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy.egg-info/SOURCES.txt +6 -1
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_filesystem_encoding.py +0 -41
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_coverage.py +0 -76
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/__main__pydevd_gen_debug_adapter_protocol.py +0 -592
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema.py +0 -19514
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info.py +0 -19
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info_regular.py +0 -153
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.c +0 -43377
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_json_debug_options.py +0 -204
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_plugin_utils.py +0 -91
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_api.py +0 -62
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_vm_type.py +0 -41
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_eval_main.py +0 -48
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydev_ipython/qt.py +0 -23
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydev_pysrc.py +0 -1
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydev_sitecustomize/sitecustomize.py +0 -237
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_always_live_program.py +0 -32
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_test_attach_to_process.py +0 -9
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_test_attach_to_process_linux.py +0 -74
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_amd64.dll +0 -0
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_amd64.pdb +0 -0
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_pydevd.py +0 -79
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86.dll +0 -0
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86.pdb +0 -0
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_amd64.exe +0 -0
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_amd64.pdb +0 -0
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_x86.pdb +0 -0
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.dll +0 -0
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.pdb +0 -0
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.dll +0 -0
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.pdb +0 -0
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/gdi32.py +0 -507
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/ntdll.py +0 -539
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/peb_teb.py +0 -3435
- {debugpy-1.8.5 → debugpy-1.8.7}/DESCRIPTION.md +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/LICENSE +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/MANIFEST.in +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/README.md +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/pyproject.toml +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/setup.cfg +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/setup.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/ThirdPartyNotices.txt +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/__main__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/_pydevd_packaging.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/_util.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/force_pydevd.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/debugProtocolCustom.json +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_concurrency_analyser/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/.gitignore +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_evaluator.pxd +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_evaluator.pyx +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_evaluator.template.pyx +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/release_mem.h +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/README.txt +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/README +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_sitecustomize/__not_in_default_pythonpath.txt +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/README.txt +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_custom_pyeval_settrace.hpp +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_custom_pyeval_settrace_310.hpp +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_custom_pyeval_settrace_311.hpp +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_custom_pyeval_settrace_common.hpp +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_settrace.hpp +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/python.h +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/ref_utils.hpp +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/.gitignore +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/attach.cpp +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/compile_linux.sh +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/compile_mac.sh +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/compile_manylinux.cmd +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/attach.h +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/inject_dll.cpp +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/py_win_helpers.hpp +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/run_code_in_memory.hpp +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/run_code_on_dllmain.cpp +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/stdafx.cpp +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/stdafx.h +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/targetver.h +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/README.md +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/__main__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/clients.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/components.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/launchers.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/servers.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/sessions.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/json.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/log.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/singleton.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/sockets.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/stacks.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/timestamp.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/util.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/launcher/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/launcher/__main__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/launcher/debuggee.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/launcher/handlers.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/launcher/output.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/launcher/winapi.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/public_api.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/server/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/server/api.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/server/attach_pid_injected.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy.egg-info/dependency_links.txt +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy.egg-info/entry_points.txt +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy.egg-info/top_level.txt +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/versioneer.py +0 -0
|
@@ -42,7 +42,7 @@ from __future__ import with_statement
|
|
|
42
42
|
|
|
43
43
|
__revision__ = "$Id$"
|
|
44
44
|
|
|
45
|
-
__all__ = [
|
|
45
|
+
__all__ = ["Module", "DebugSymbolsWarning"]
|
|
46
46
|
|
|
47
47
|
import sys
|
|
48
48
|
from winappdbg import win32
|
|
@@ -57,17 +57,20 @@ import os
|
|
|
57
57
|
import warnings
|
|
58
58
|
import traceback
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
# ==============================================================================
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
|
|
63
|
+
class DebugSymbolsWarning(UserWarning):
|
|
63
64
|
"""
|
|
64
65
|
This warning is issued if the support for debug symbols
|
|
65
66
|
isn't working properly.
|
|
66
67
|
"""
|
|
67
68
|
|
|
68
|
-
#==============================================================================
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
# ==============================================================================
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
class Module(object):
|
|
71
74
|
"""
|
|
72
75
|
Interface to a DLL library loaded in the context of another process.
|
|
73
76
|
|
|
@@ -115,14 +118,14 @@ class Module (object):
|
|
|
115
118
|
Use the L{get_process} method instead.
|
|
116
119
|
"""
|
|
117
120
|
|
|
118
|
-
unknown =
|
|
121
|
+
unknown = "<unknown>"
|
|
119
122
|
|
|
120
|
-
class _SymbolEnumerator
|
|
123
|
+
class _SymbolEnumerator(object):
|
|
121
124
|
"""
|
|
122
125
|
Internally used by L{Module} to enumerate symbols in a module.
|
|
123
126
|
"""
|
|
124
127
|
|
|
125
|
-
def __init__(self, undecorate
|
|
128
|
+
def __init__(self, undecorate=False):
|
|
126
129
|
self.symbols = list()
|
|
127
130
|
self.undecorate = undecorate
|
|
128
131
|
|
|
@@ -134,14 +137,11 @@ class Module (object):
|
|
|
134
137
|
try:
|
|
135
138
|
SymbolName = win32.UnDecorateSymbolName(SymbolName)
|
|
136
139
|
except Exception:
|
|
137
|
-
pass
|
|
138
|
-
self.symbols.append(
|
|
140
|
+
pass # not all symbols are decorated!
|
|
141
|
+
self.symbols.append((SymbolName, SymbolAddress, SymbolSize))
|
|
139
142
|
return win32.TRUE
|
|
140
143
|
|
|
141
|
-
def __init__(self, lpBaseOfDll, hFile = None,
|
|
142
|
-
SizeOfImage = None,
|
|
143
|
-
EntryPoint = None,
|
|
144
|
-
process = None):
|
|
144
|
+
def __init__(self, lpBaseOfDll, hFile=None, fileName=None, SizeOfImage=None, EntryPoint=None, process=None):
|
|
145
145
|
"""
|
|
146
146
|
@type lpBaseOfDll: str
|
|
147
147
|
@param lpBaseOfDll: Base address of the module.
|
|
@@ -161,10 +161,10 @@ class Module (object):
|
|
|
161
161
|
@type process: L{Process}
|
|
162
162
|
@param process: (Optional) Process where the module is loaded.
|
|
163
163
|
"""
|
|
164
|
-
self.lpBaseOfDll
|
|
165
|
-
self.fileName
|
|
166
|
-
self.SizeOfImage
|
|
167
|
-
self.EntryPoint
|
|
164
|
+
self.lpBaseOfDll = lpBaseOfDll
|
|
165
|
+
self.fileName = fileName
|
|
166
|
+
self.SizeOfImage = SizeOfImage
|
|
167
|
+
self.EntryPoint = EntryPoint
|
|
168
168
|
|
|
169
169
|
self.__symbols = list()
|
|
170
170
|
|
|
@@ -172,21 +172,21 @@ class Module (object):
|
|
|
172
172
|
self.set_process(process)
|
|
173
173
|
|
|
174
174
|
# Not really sure if it's a good idea...
|
|
175
|
-
## def __eq__(self, aModule):
|
|
176
|
-
## """
|
|
177
|
-
## Compare two Module objects. The comparison is made using the process
|
|
178
|
-
## IDs and the module bases.
|
|
179
|
-
##
|
|
180
|
-
## @type aModule: L{Module}
|
|
181
|
-
## @param aModule: Another Module object.
|
|
182
|
-
##
|
|
183
|
-
## @rtype: bool
|
|
184
|
-
## @return: C{True} if the two process IDs and module bases are equal,
|
|
185
|
-
## C{False} otherwise.
|
|
186
|
-
## """
|
|
187
|
-
## return isinstance(aModule, Module) and \
|
|
188
|
-
## self.get_pid() == aModule.get_pid() and \
|
|
189
|
-
## self.get_base() == aModule.get_base()
|
|
175
|
+
## def __eq__(self, aModule):
|
|
176
|
+
## """
|
|
177
|
+
## Compare two Module objects. The comparison is made using the process
|
|
178
|
+
## IDs and the module bases.
|
|
179
|
+
##
|
|
180
|
+
## @type aModule: L{Module}
|
|
181
|
+
## @param aModule: Another Module object.
|
|
182
|
+
##
|
|
183
|
+
## @rtype: bool
|
|
184
|
+
## @return: C{True} if the two process IDs and module bases are equal,
|
|
185
|
+
## C{False} otherwise.
|
|
186
|
+
## """
|
|
187
|
+
## return isinstance(aModule, Module) and \
|
|
188
|
+
## self.get_pid() == aModule.get_pid() and \
|
|
189
|
+
## self.get_base() == aModule.get_base()
|
|
190
190
|
|
|
191
191
|
def get_handle(self):
|
|
192
192
|
"""
|
|
@@ -217,7 +217,7 @@ class Module (object):
|
|
|
217
217
|
# no way to guess!
|
|
218
218
|
return self.__process
|
|
219
219
|
|
|
220
|
-
def set_process(self, process
|
|
220
|
+
def set_process(self, process=None):
|
|
221
221
|
"""
|
|
222
222
|
Manually set the parent process. Use with care!
|
|
223
223
|
|
|
@@ -227,11 +227,11 @@ class Module (object):
|
|
|
227
227
|
if process is None:
|
|
228
228
|
self.__process = None
|
|
229
229
|
else:
|
|
230
|
-
global Process
|
|
230
|
+
global Process # delayed import
|
|
231
231
|
if Process is None:
|
|
232
232
|
from winappdbg.process import Process
|
|
233
233
|
if not isinstance(process, Process):
|
|
234
|
-
msg
|
|
234
|
+
msg = "Parent process must be a Process instance, "
|
|
235
235
|
msg += "got %s instead" % type(process)
|
|
236
236
|
raise TypeError(msg)
|
|
237
237
|
self.__process = process
|
|
@@ -281,17 +281,14 @@ class Module (object):
|
|
|
281
281
|
process = self.get_process()
|
|
282
282
|
if process:
|
|
283
283
|
try:
|
|
284
|
-
handle = process.get_handle(
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
mi = win32.GetModuleInformation(handle, base)
|
|
284
|
+
handle = process.get_handle(win32.PROCESS_VM_READ | win32.PROCESS_QUERY_INFORMATION)
|
|
285
|
+
base = self.get_base()
|
|
286
|
+
mi = win32.GetModuleInformation(handle, base)
|
|
288
287
|
self.SizeOfImage = mi.SizeOfImage
|
|
289
|
-
self.EntryPoint
|
|
288
|
+
self.EntryPoint = mi.EntryPoint
|
|
290
289
|
except WindowsError:
|
|
291
290
|
e = sys.exc_info()[1]
|
|
292
|
-
warnings.warn(
|
|
293
|
-
"Cannot get size and entry point of module %s, reason: %s"\
|
|
294
|
-
% (self.get_name(), e.strerror), RuntimeWarning)
|
|
291
|
+
warnings.warn("Cannot get size and entry point of module %s, reason: %s" % (self.get_name(), e.strerror), RuntimeWarning)
|
|
295
292
|
|
|
296
293
|
def get_filename(self):
|
|
297
294
|
"""
|
|
@@ -344,7 +341,7 @@ class Module (object):
|
|
|
344
341
|
modName = self.__filename_to_modname(pathname)
|
|
345
342
|
if isinstance(modName, compat.unicode):
|
|
346
343
|
try:
|
|
347
|
-
modName = modName.encode(
|
|
344
|
+
modName = modName.encode("cp1252")
|
|
348
345
|
except UnicodeEncodeError:
|
|
349
346
|
e = sys.exc_info()[1]
|
|
350
347
|
warnings.warn(str(e))
|
|
@@ -383,7 +380,7 @@ class Module (object):
|
|
|
383
380
|
# No match.
|
|
384
381
|
return False
|
|
385
382
|
|
|
386
|
-
|
|
383
|
+
# ------------------------------------------------------------------------------
|
|
387
384
|
|
|
388
385
|
def open_handle(self):
|
|
389
386
|
"""
|
|
@@ -394,16 +391,14 @@ class Module (object):
|
|
|
394
391
|
|
|
395
392
|
if not self.get_filename():
|
|
396
393
|
msg = "Cannot retrieve filename for module at %s"
|
|
397
|
-
msg = msg % HexDump.address(
|
|
394
|
+
msg = msg % HexDump.address(self.get_base())
|
|
398
395
|
raise Exception(msg)
|
|
399
396
|
|
|
400
|
-
hFile = win32.CreateFile(self.get_filename(),
|
|
401
|
-
dwShareMode = win32.FILE_SHARE_READ,
|
|
402
|
-
dwCreationDisposition = win32.OPEN_EXISTING)
|
|
397
|
+
hFile = win32.CreateFile(self.get_filename(), dwShareMode=win32.FILE_SHARE_READ, dwCreationDisposition=win32.OPEN_EXISTING)
|
|
403
398
|
|
|
404
399
|
# In case hFile was set to an actual handle value instead of a Handle
|
|
405
400
|
# object. This shouldn't happen unless the user tinkered with hFile.
|
|
406
|
-
if not hasattr(self.hFile,
|
|
401
|
+
if not hasattr(self.hFile, "__del__"):
|
|
407
402
|
self.close_handle()
|
|
408
403
|
|
|
409
404
|
self.hFile = hFile
|
|
@@ -418,7 +413,7 @@ class Module (object):
|
|
|
418
413
|
setting L{hFile} to C{None} should be enough.
|
|
419
414
|
"""
|
|
420
415
|
try:
|
|
421
|
-
if hasattr(self.hFile,
|
|
416
|
+
if hasattr(self.hFile, "close"):
|
|
422
417
|
self.hFile.close()
|
|
423
418
|
elif self.hFile not in (None, win32.INVALID_HANDLE_VALUE):
|
|
424
419
|
win32.CloseHandle(self.hFile)
|
|
@@ -443,7 +438,7 @@ class Module (object):
|
|
|
443
438
|
finally:
|
|
444
439
|
self.close_handle()
|
|
445
440
|
|
|
446
|
-
|
|
441
|
+
# ------------------------------------------------------------------------------
|
|
447
442
|
|
|
448
443
|
# XXX FIXME
|
|
449
444
|
# I've been told sometimes the debugging symbols APIs don't correctly
|
|
@@ -458,47 +453,38 @@ class Module (object):
|
|
|
458
453
|
dwAccess = win32.PROCESS_QUERY_LIMITED_INFORMATION
|
|
459
454
|
else:
|
|
460
455
|
dwAccess = win32.PROCESS_QUERY_INFORMATION
|
|
461
|
-
hProcess
|
|
462
|
-
hFile
|
|
463
|
-
BaseOfDll
|
|
464
|
-
SizeOfDll
|
|
465
|
-
Enumerator
|
|
456
|
+
hProcess = self.get_process().get_handle(dwAccess)
|
|
457
|
+
hFile = self.hFile
|
|
458
|
+
BaseOfDll = self.get_base()
|
|
459
|
+
SizeOfDll = self.get_size()
|
|
460
|
+
Enumerator = self._SymbolEnumerator()
|
|
466
461
|
try:
|
|
467
462
|
win32.SymInitialize(hProcess)
|
|
468
463
|
SymOptions = win32.SymGetOptions()
|
|
469
464
|
SymOptions |= (
|
|
470
|
-
win32.SYMOPT_ALLOW_ZERO_ADDRESS
|
|
471
|
-
win32.SYMOPT_CASE_INSENSITIVE
|
|
472
|
-
win32.SYMOPT_FAVOR_COMPRESSED
|
|
473
|
-
win32.SYMOPT_INCLUDE_32BIT_MODULES
|
|
474
|
-
win32.SYMOPT_UNDNAME
|
|
475
|
-
)
|
|
476
|
-
SymOptions &= ~(
|
|
477
|
-
win32.SYMOPT_LOAD_LINES |
|
|
478
|
-
win32.SYMOPT_NO_IMAGE_SEARCH |
|
|
479
|
-
win32.SYMOPT_NO_CPP |
|
|
480
|
-
win32.SYMOPT_IGNORE_NT_SYMPATH
|
|
465
|
+
win32.SYMOPT_ALLOW_ZERO_ADDRESS
|
|
466
|
+
| win32.SYMOPT_CASE_INSENSITIVE
|
|
467
|
+
| win32.SYMOPT_FAVOR_COMPRESSED
|
|
468
|
+
| win32.SYMOPT_INCLUDE_32BIT_MODULES
|
|
469
|
+
| win32.SYMOPT_UNDNAME
|
|
481
470
|
)
|
|
471
|
+
SymOptions &= ~(win32.SYMOPT_LOAD_LINES | win32.SYMOPT_NO_IMAGE_SEARCH | win32.SYMOPT_NO_CPP | win32.SYMOPT_IGNORE_NT_SYMPATH)
|
|
482
472
|
win32.SymSetOptions(SymOptions)
|
|
483
473
|
try:
|
|
484
|
-
win32.SymSetOptions(
|
|
485
|
-
SymOptions | win32.SYMOPT_ALLOW_ABSOLUTE_SYMBOLS)
|
|
474
|
+
win32.SymSetOptions(SymOptions | win32.SYMOPT_ALLOW_ABSOLUTE_SYMBOLS)
|
|
486
475
|
except WindowsError:
|
|
487
476
|
pass
|
|
488
477
|
try:
|
|
489
478
|
try:
|
|
490
|
-
success = win32.SymLoadModule64(
|
|
491
|
-
hProcess, hFile, None, None, BaseOfDll, SizeOfDll)
|
|
479
|
+
success = win32.SymLoadModule64(hProcess, hFile, None, None, BaseOfDll, SizeOfDll)
|
|
492
480
|
except WindowsError:
|
|
493
481
|
success = 0
|
|
494
482
|
if not success:
|
|
495
483
|
ImageName = self.get_filename()
|
|
496
|
-
success = win32.SymLoadModule64(
|
|
497
|
-
hProcess, None, ImageName, None, BaseOfDll, SizeOfDll)
|
|
484
|
+
success = win32.SymLoadModule64(hProcess, None, ImageName, None, BaseOfDll, SizeOfDll)
|
|
498
485
|
if success:
|
|
499
486
|
try:
|
|
500
|
-
win32.SymEnumerateSymbols64(
|
|
501
|
-
hProcess, BaseOfDll, Enumerator)
|
|
487
|
+
win32.SymEnumerateSymbols64(hProcess, BaseOfDll, Enumerator)
|
|
502
488
|
finally:
|
|
503
489
|
win32.SymUnloadModule64(hProcess, BaseOfDll)
|
|
504
490
|
finally:
|
|
@@ -549,7 +535,7 @@ class Module (object):
|
|
|
549
535
|
self.load_symbols()
|
|
550
536
|
return self.__symbols.__iter__()
|
|
551
537
|
|
|
552
|
-
def resolve_symbol(self, symbol, bCaseSensitive
|
|
538
|
+
def resolve_symbol(self, symbol, bCaseSensitive=False):
|
|
553
539
|
"""
|
|
554
540
|
Resolves a debugging symbol's address.
|
|
555
541
|
|
|
@@ -564,10 +550,10 @@ class Module (object):
|
|
|
564
550
|
@return: Memory address of symbol. C{None} if not found.
|
|
565
551
|
"""
|
|
566
552
|
if bCaseSensitive:
|
|
567
|
-
for
|
|
553
|
+
for SymbolName, SymbolAddress, SymbolSize in self.iter_symbols():
|
|
568
554
|
if symbol == SymbolName:
|
|
569
555
|
return SymbolAddress
|
|
570
|
-
for
|
|
556
|
+
for SymbolName, SymbolAddress, SymbolSize in self.iter_symbols():
|
|
571
557
|
try:
|
|
572
558
|
SymbolName = win32.UnDecorateSymbolName(SymbolName)
|
|
573
559
|
except Exception:
|
|
@@ -576,10 +562,10 @@ class Module (object):
|
|
|
576
562
|
return SymbolAddress
|
|
577
563
|
else:
|
|
578
564
|
symbol = symbol.lower()
|
|
579
|
-
for
|
|
565
|
+
for SymbolName, SymbolAddress, SymbolSize in self.iter_symbols():
|
|
580
566
|
if symbol == SymbolName.lower():
|
|
581
567
|
return SymbolAddress
|
|
582
|
-
for
|
|
568
|
+
for SymbolName, SymbolAddress, SymbolSize in self.iter_symbols():
|
|
583
569
|
try:
|
|
584
570
|
SymbolName = win32.UnDecorateSymbolName(SymbolName)
|
|
585
571
|
except Exception:
|
|
@@ -602,7 +588,7 @@ class Module (object):
|
|
|
602
588
|
Returns C{None} if no symbol could be matched.
|
|
603
589
|
"""
|
|
604
590
|
found = None
|
|
605
|
-
for
|
|
591
|
+
for SymbolName, SymbolAddress, SymbolSize in self.iter_symbols():
|
|
606
592
|
if SymbolAddress > address:
|
|
607
593
|
continue
|
|
608
594
|
if SymbolAddress + SymbolSize > address:
|
|
@@ -610,9 +596,9 @@ class Module (object):
|
|
|
610
596
|
found = (SymbolName, SymbolAddress, SymbolSize)
|
|
611
597
|
return found
|
|
612
598
|
|
|
613
|
-
|
|
599
|
+
# ------------------------------------------------------------------------------
|
|
614
600
|
|
|
615
|
-
def get_label(self, function
|
|
601
|
+
def get_label(self, function=None, offset=None):
|
|
616
602
|
"""
|
|
617
603
|
Retrieves the label for the given function of this module or the module
|
|
618
604
|
base address if no function name is given.
|
|
@@ -628,7 +614,7 @@ class Module (object):
|
|
|
628
614
|
"""
|
|
629
615
|
return _ModuleContainer.parse_label(self.get_name(), function, offset)
|
|
630
616
|
|
|
631
|
-
def get_label_at_address(self, address, offset
|
|
617
|
+
def get_label_at_address(self, address, offset=None):
|
|
632
618
|
"""
|
|
633
619
|
Creates a label from the given memory address.
|
|
634
620
|
|
|
@@ -650,16 +636,16 @@ class Module (object):
|
|
|
650
636
|
address = address + offset
|
|
651
637
|
|
|
652
638
|
# Make the label relative to the base address if no match is found.
|
|
653
|
-
module
|
|
654
|
-
function
|
|
655
|
-
offset
|
|
639
|
+
module = self.get_name()
|
|
640
|
+
function = None
|
|
641
|
+
offset = address - self.get_base()
|
|
656
642
|
|
|
657
643
|
# Make the label relative to the entrypoint if no other match is found.
|
|
658
644
|
# Skip if the entry point is unknown.
|
|
659
645
|
start = self.get_entry_point()
|
|
660
646
|
if start and start <= address:
|
|
661
|
-
function
|
|
662
|
-
offset
|
|
647
|
+
function = "start"
|
|
648
|
+
offset = address - start
|
|
663
649
|
|
|
664
650
|
# Enumerate exported functions and debug symbols,
|
|
665
651
|
# then find the closest match, if possible.
|
|
@@ -669,8 +655,8 @@ class Module (object):
|
|
|
669
655
|
(SymbolName, SymbolAddress, SymbolSize) = symbol
|
|
670
656
|
new_offset = address - SymbolAddress
|
|
671
657
|
if new_offset <= offset:
|
|
672
|
-
function
|
|
673
|
-
offset
|
|
658
|
+
function = SymbolName
|
|
659
|
+
offset = new_offset
|
|
674
660
|
except WindowsError:
|
|
675
661
|
pass
|
|
676
662
|
|
|
@@ -716,14 +702,12 @@ class Module (object):
|
|
|
716
702
|
|
|
717
703
|
# If the DLL is already mapped locally, resolve the function.
|
|
718
704
|
try:
|
|
719
|
-
hlib
|
|
705
|
+
hlib = win32.GetModuleHandle(filename)
|
|
720
706
|
address = win32.GetProcAddress(hlib, function)
|
|
721
707
|
except WindowsError:
|
|
722
|
-
|
|
723
708
|
# Load the DLL locally, resolve the function and unload it.
|
|
724
709
|
try:
|
|
725
|
-
hlib = win32.LoadLibraryEx(filename,
|
|
726
|
-
win32.DONT_RESOLVE_DLL_REFERENCES)
|
|
710
|
+
hlib = win32.LoadLibraryEx(filename, win32.DONT_RESOLVE_DLL_REFERENCES)
|
|
727
711
|
try:
|
|
728
712
|
address = win32.GetProcAddress(hlib, function)
|
|
729
713
|
finally:
|
|
@@ -770,7 +754,6 @@ class Module (object):
|
|
|
770
754
|
if procedure:
|
|
771
755
|
address = self.resolve(procedure)
|
|
772
756
|
if address is None:
|
|
773
|
-
|
|
774
757
|
# If it's a debug symbol, use the symbol.
|
|
775
758
|
address = self.resolve_symbol(procedure)
|
|
776
759
|
|
|
@@ -794,7 +777,8 @@ class Module (object):
|
|
|
794
777
|
address = address + offset
|
|
795
778
|
return address
|
|
796
779
|
|
|
797
|
-
|
|
780
|
+
|
|
781
|
+
# ==============================================================================
|
|
798
782
|
|
|
799
783
|
# TODO
|
|
800
784
|
# An alternative approach to the toolhelp32 snapshots: parsing the PEB and
|
|
@@ -802,7 +786,8 @@ class Module (object):
|
|
|
802
786
|
# of toolhelp32 not working when the process hasn't finished initializing.
|
|
803
787
|
# See: http://pferrie.host22.com/misc/lowlevel3.htm
|
|
804
788
|
|
|
805
|
-
|
|
789
|
+
|
|
790
|
+
class _ModuleContainer(object):
|
|
806
791
|
"""
|
|
807
792
|
Encapsulates the capability to contain Module objects.
|
|
808
793
|
|
|
@@ -947,7 +932,7 @@ class _ModuleContainer (object):
|
|
|
947
932
|
self.__initialize_snapshot()
|
|
948
933
|
return len(self.__moduleDict)
|
|
949
934
|
|
|
950
|
-
|
|
935
|
+
# ------------------------------------------------------------------------------
|
|
951
936
|
|
|
952
937
|
def get_module_by_name(self, modName):
|
|
953
938
|
"""
|
|
@@ -975,12 +960,12 @@ class _ModuleContainer (object):
|
|
|
975
960
|
for lib in self.iter_modules():
|
|
976
961
|
if modName == lib.get_filename().lower():
|
|
977
962
|
return lib
|
|
978
|
-
return None
|
|
963
|
+
return None # Stop trying to match the name.
|
|
979
964
|
|
|
980
965
|
# Get all the module names.
|
|
981
966
|
# This prevents having to iterate through the module list
|
|
982
967
|
# more than once.
|
|
983
|
-
modDict = [
|
|
968
|
+
modDict = [(lib.get_name(), lib) for lib in self.iter_modules()]
|
|
984
969
|
modDict = dict(modDict)
|
|
985
970
|
|
|
986
971
|
# modName is a base filename.
|
|
@@ -1020,13 +1005,13 @@ class _ModuleContainer (object):
|
|
|
1020
1005
|
i = 0
|
|
1021
1006
|
max_i = len(bases) - 1
|
|
1022
1007
|
while i < max_i:
|
|
1023
|
-
begin, end = bases[i:i+2]
|
|
1008
|
+
begin, end = bases[i : i + 2]
|
|
1024
1009
|
if begin <= address < end:
|
|
1025
1010
|
module = self.get_module(begin)
|
|
1026
|
-
here
|
|
1011
|
+
here = module.is_address_here(address)
|
|
1027
1012
|
if here is False:
|
|
1028
1013
|
break
|
|
1029
|
-
else:
|
|
1014
|
+
else: # True or None
|
|
1030
1015
|
return module
|
|
1031
1016
|
i = i + 1
|
|
1032
1017
|
return None
|
|
@@ -1057,35 +1042,32 @@ class _ModuleContainer (object):
|
|
|
1057
1042
|
# It would seem easier to clear the snapshot first.
|
|
1058
1043
|
# But then all open handles would be closed.
|
|
1059
1044
|
found_bases = set()
|
|
1060
|
-
with win32.CreateToolhelp32Snapshot(win32.TH32CS_SNAPMODULE,
|
|
1061
|
-
dwProcessId) as hSnapshot:
|
|
1045
|
+
with win32.CreateToolhelp32Snapshot(win32.TH32CS_SNAPMODULE, dwProcessId) as hSnapshot:
|
|
1062
1046
|
me = win32.Module32First(hSnapshot)
|
|
1063
1047
|
while me is not None:
|
|
1064
1048
|
lpBaseAddress = me.modBaseAddr
|
|
1065
|
-
fileName
|
|
1049
|
+
fileName = me.szExePath # full pathname
|
|
1066
1050
|
if not fileName:
|
|
1067
|
-
fileName
|
|
1051
|
+
fileName = me.szModule # filename only
|
|
1068
1052
|
if not fileName:
|
|
1069
1053
|
fileName = None
|
|
1070
1054
|
else:
|
|
1071
1055
|
fileName = PathOperations.native_to_win32_pathname(fileName)
|
|
1072
1056
|
found_bases.add(lpBaseAddress)
|
|
1073
|
-
## if not self.has_module(lpBaseAddress): # XXX triggers a scan
|
|
1057
|
+
## if not self.has_module(lpBaseAddress): # XXX triggers a scan
|
|
1074
1058
|
if lpBaseAddress not in self.__moduleDict:
|
|
1075
|
-
aModule = Module(lpBaseAddress, fileName =
|
|
1076
|
-
SizeOfImage = me.modBaseSize,
|
|
1077
|
-
process = self)
|
|
1059
|
+
aModule = Module(lpBaseAddress, fileName=fileName, SizeOfImage=me.modBaseSize, process=self)
|
|
1078
1060
|
self._add_module(aModule)
|
|
1079
1061
|
else:
|
|
1080
1062
|
aModule = self.get_module(lpBaseAddress)
|
|
1081
1063
|
if not aModule.fileName:
|
|
1082
|
-
aModule.fileName
|
|
1064
|
+
aModule.fileName = fileName
|
|
1083
1065
|
if not aModule.SizeOfImage:
|
|
1084
1066
|
aModule.SizeOfImage = me.modBaseSize
|
|
1085
1067
|
if not aModule.process:
|
|
1086
|
-
aModule.process
|
|
1068
|
+
aModule.process = self
|
|
1087
1069
|
me = win32.Module32Next(hSnapshot)
|
|
1088
|
-
## for base in self.get_module_bases(): # XXX triggers a scan
|
|
1070
|
+
## for base in self.get_module_bases(): # XXX triggers a scan
|
|
1089
1071
|
for base in compat.keys(self.__moduleDict):
|
|
1090
1072
|
if base not in found_bases:
|
|
1091
1073
|
self._del_module(base)
|
|
@@ -1098,10 +1080,10 @@ class _ModuleContainer (object):
|
|
|
1098
1080
|
aModule.clear()
|
|
1099
1081
|
self.__moduleDict = dict()
|
|
1100
1082
|
|
|
1101
|
-
|
|
1083
|
+
# ------------------------------------------------------------------------------
|
|
1102
1084
|
|
|
1103
1085
|
@staticmethod
|
|
1104
|
-
def parse_label(module
|
|
1086
|
+
def parse_label(module=None, function=None, offset=None):
|
|
1105
1087
|
"""
|
|
1106
1088
|
Creates a label from a module and a function name, plus an offset.
|
|
1107
1089
|
|
|
@@ -1139,9 +1121,9 @@ class _ModuleContainer (object):
|
|
|
1139
1121
|
pass
|
|
1140
1122
|
|
|
1141
1123
|
# Validate the parameters.
|
|
1142
|
-
if module is not None and (
|
|
1124
|
+
if module is not None and ("!" in module or "+" in module):
|
|
1143
1125
|
raise ValueError("Invalid module name: %s" % module)
|
|
1144
|
-
if function is not None and (
|
|
1126
|
+
if function is not None and ("!" in function or "+" in function):
|
|
1145
1127
|
raise ValueError("Invalid function name: %s" % function)
|
|
1146
1128
|
|
|
1147
1129
|
# Parse the label.
|
|
@@ -1153,7 +1135,7 @@ class _ModuleContainer (object):
|
|
|
1153
1135
|
label = "%s!%s" % (module, function)
|
|
1154
1136
|
else:
|
|
1155
1137
|
if offset:
|
|
1156
|
-
## label = "%s+0x%x!" % (module, offset)
|
|
1138
|
+
## label = "%s+0x%x!" % (module, offset)
|
|
1157
1139
|
label = "%s!0x%x" % (module, offset)
|
|
1158
1140
|
else:
|
|
1159
1141
|
label = "%s!" % module
|
|
@@ -1207,33 +1189,32 @@ class _ModuleContainer (object):
|
|
|
1207
1189
|
if not label:
|
|
1208
1190
|
label = "0x0"
|
|
1209
1191
|
else:
|
|
1210
|
-
|
|
1211
1192
|
# Remove all blanks.
|
|
1212
|
-
label = label.replace(
|
|
1213
|
-
label = label.replace(
|
|
1214
|
-
label = label.replace(
|
|
1215
|
-
label = label.replace(
|
|
1193
|
+
label = label.replace(" ", "")
|
|
1194
|
+
label = label.replace("\t", "")
|
|
1195
|
+
label = label.replace("\r", "")
|
|
1196
|
+
label = label.replace("\n", "")
|
|
1216
1197
|
|
|
1217
1198
|
# Special case: empty label.
|
|
1218
1199
|
if not label:
|
|
1219
1200
|
label = "0x0"
|
|
1220
1201
|
|
|
1221
1202
|
# * ! *
|
|
1222
|
-
if
|
|
1203
|
+
if "!" in label:
|
|
1223
1204
|
try:
|
|
1224
|
-
module, function = label.split(
|
|
1205
|
+
module, function = label.split("!")
|
|
1225
1206
|
except ValueError:
|
|
1226
1207
|
raise ValueError("Malformed label: %s" % label)
|
|
1227
1208
|
|
|
1228
1209
|
# module ! function
|
|
1229
1210
|
if function:
|
|
1230
|
-
if
|
|
1211
|
+
if "+" in module:
|
|
1231
1212
|
raise ValueError("Malformed label: %s" % label)
|
|
1232
1213
|
|
|
1233
1214
|
# module ! function + offset
|
|
1234
|
-
if
|
|
1215
|
+
if "+" in function:
|
|
1235
1216
|
try:
|
|
1236
|
-
function, offset = function.split(
|
|
1217
|
+
function, offset = function.split("+")
|
|
1237
1218
|
except ValueError:
|
|
1238
1219
|
raise ValueError("Malformed label: %s" % label)
|
|
1239
1220
|
try:
|
|
@@ -1241,19 +1222,17 @@ class _ModuleContainer (object):
|
|
|
1241
1222
|
except ValueError:
|
|
1242
1223
|
raise ValueError("Malformed label: %s" % label)
|
|
1243
1224
|
else:
|
|
1244
|
-
|
|
1245
1225
|
# module ! offset
|
|
1246
1226
|
try:
|
|
1247
|
-
offset
|
|
1227
|
+
offset = HexInput.integer(function)
|
|
1248
1228
|
function = None
|
|
1249
1229
|
except ValueError:
|
|
1250
1230
|
pass
|
|
1251
1231
|
else:
|
|
1252
|
-
|
|
1253
1232
|
# module + offset !
|
|
1254
|
-
if
|
|
1233
|
+
if "+" in module:
|
|
1255
1234
|
try:
|
|
1256
|
-
module, offset = module.split(
|
|
1235
|
+
module, offset = module.split("+")
|
|
1257
1236
|
except ValueError:
|
|
1258
1237
|
raise ValueError("Malformed label: %s" % label)
|
|
1259
1238
|
try:
|
|
@@ -1262,7 +1241,6 @@ class _ModuleContainer (object):
|
|
|
1262
1241
|
raise ValueError("Malformed label: %s" % label)
|
|
1263
1242
|
|
|
1264
1243
|
else:
|
|
1265
|
-
|
|
1266
1244
|
# module !
|
|
1267
1245
|
try:
|
|
1268
1246
|
offset = HexInput.integer(module)
|
|
@@ -1273,20 +1251,19 @@ class _ModuleContainer (object):
|
|
|
1273
1251
|
pass
|
|
1274
1252
|
|
|
1275
1253
|
if not module:
|
|
1276
|
-
module
|
|
1254
|
+
module = None
|
|
1277
1255
|
if not function:
|
|
1278
1256
|
function = None
|
|
1279
1257
|
|
|
1280
1258
|
# *
|
|
1281
1259
|
else:
|
|
1282
|
-
|
|
1283
1260
|
# offset
|
|
1284
1261
|
try:
|
|
1285
1262
|
offset = HexInput.integer(label)
|
|
1286
1263
|
|
|
1287
1264
|
# # ordinal
|
|
1288
1265
|
except ValueError:
|
|
1289
|
-
if label.startswith(
|
|
1266
|
+
if label.startswith("#"):
|
|
1290
1267
|
function = label
|
|
1291
1268
|
try:
|
|
1292
1269
|
HexInput.integer(function[1:])
|
|
@@ -1302,7 +1279,7 @@ class _ModuleContainer (object):
|
|
|
1302
1279
|
raise ValueError("Ambiguous label: %s" % label)
|
|
1303
1280
|
|
|
1304
1281
|
# Convert function ordinal strings into integers.
|
|
1305
|
-
if function and function.startswith(
|
|
1282
|
+
if function and function.startswith("#"):
|
|
1306
1283
|
try:
|
|
1307
1284
|
function = HexInput.integer(function[1:])
|
|
1308
1285
|
except ValueError:
|
|
@@ -1352,31 +1329,30 @@ class _ModuleContainer (object):
|
|
|
1352
1329
|
if not label:
|
|
1353
1330
|
label = compat.b("0x0")
|
|
1354
1331
|
else:
|
|
1355
|
-
|
|
1356
1332
|
# Remove all blanks.
|
|
1357
|
-
label = label.replace(compat.b(
|
|
1358
|
-
label = label.replace(compat.b(
|
|
1359
|
-
label = label.replace(compat.b(
|
|
1360
|
-
label = label.replace(compat.b(
|
|
1333
|
+
label = label.replace(compat.b(" "), compat.b(""))
|
|
1334
|
+
label = label.replace(compat.b("\t"), compat.b(""))
|
|
1335
|
+
label = label.replace(compat.b("\r"), compat.b(""))
|
|
1336
|
+
label = label.replace(compat.b("\n"), compat.b(""))
|
|
1361
1337
|
|
|
1362
1338
|
# Special case: empty label.
|
|
1363
1339
|
if not label:
|
|
1364
1340
|
label = compat.b("0x0")
|
|
1365
1341
|
|
|
1366
1342
|
# If an exclamation sign is present, we know we can parse it strictly.
|
|
1367
|
-
if compat.b(
|
|
1343
|
+
if compat.b("!") in label:
|
|
1368
1344
|
return self.split_label_strict(label)
|
|
1369
1345
|
|
|
1370
|
-
## # Try to parse it strictly, on error do it the fuzzy way.
|
|
1371
|
-
## try:
|
|
1372
|
-
## return self.split_label(label)
|
|
1373
|
-
## except ValueError:
|
|
1374
|
-
## pass
|
|
1346
|
+
## # Try to parse it strictly, on error do it the fuzzy way.
|
|
1347
|
+
## try:
|
|
1348
|
+
## return self.split_label(label)
|
|
1349
|
+
## except ValueError:
|
|
1350
|
+
## pass
|
|
1375
1351
|
|
|
1376
1352
|
# * + offset
|
|
1377
|
-
if compat.b(
|
|
1353
|
+
if compat.b("+") in label:
|
|
1378
1354
|
try:
|
|
1379
|
-
prefix, offset = label.split(compat.b(
|
|
1355
|
+
prefix, offset = label.split(compat.b("+"))
|
|
1380
1356
|
except ValueError:
|
|
1381
1357
|
raise ValueError("Malformed label: %s" % label)
|
|
1382
1358
|
try:
|
|
@@ -1388,13 +1364,11 @@ class _ModuleContainer (object):
|
|
|
1388
1364
|
# This parses both filenames and base addresses.
|
|
1389
1365
|
modobj = self.get_module_by_name(label)
|
|
1390
1366
|
if modobj:
|
|
1391
|
-
|
|
1392
1367
|
# module
|
|
1393
1368
|
# module + offset
|
|
1394
1369
|
module = modobj.get_name()
|
|
1395
1370
|
|
|
1396
1371
|
else:
|
|
1397
|
-
|
|
1398
1372
|
# TODO
|
|
1399
1373
|
# If 0xAAAAAAAA + 0xBBBBBBBB is given,
|
|
1400
1374
|
# A is interpreted as a module base address,
|
|
@@ -1426,8 +1400,7 @@ class _ModuleContainer (object):
|
|
|
1426
1400
|
# to prevent an infinite recursion if there's a bug here.
|
|
1427
1401
|
try:
|
|
1428
1402
|
new_label = self.get_label_at_address(offset)
|
|
1429
|
-
module, function, offset =
|
|
1430
|
-
self.split_label_strict(new_label)
|
|
1403
|
+
module, function, offset = self.split_label_strict(new_label)
|
|
1431
1404
|
except ValueError:
|
|
1432
1405
|
pass
|
|
1433
1406
|
|
|
@@ -1437,7 +1410,7 @@ class _ModuleContainer (object):
|
|
|
1437
1410
|
function = label
|
|
1438
1411
|
|
|
1439
1412
|
# Convert function ordinal strings into integers.
|
|
1440
|
-
if function and function.startswith(compat.b(
|
|
1413
|
+
if function and function.startswith(compat.b("#")):
|
|
1441
1414
|
try:
|
|
1442
1415
|
function = HexInput.integer(function[1:])
|
|
1443
1416
|
except ValueError:
|
|
@@ -1452,37 +1425,37 @@ class _ModuleContainer (object):
|
|
|
1452
1425
|
@classmethod
|
|
1453
1426
|
def split_label(cls, label):
|
|
1454
1427
|
"""
|
|
1455
|
-
Splits a label into it's C{module}, C{function} and C{offset}
|
|
1456
|
-
components, as used in L{parse_label}.
|
|
1428
|
+
Splits a label into it's C{module}, C{function} and C{offset}
|
|
1429
|
+
components, as used in L{parse_label}.
|
|
1457
1430
|
|
|
1458
|
-
When called as a static method, the strict syntax mode is used::
|
|
1431
|
+
When called as a static method, the strict syntax mode is used::
|
|
1459
1432
|
|
|
1460
|
-
|
|
1433
|
+
winappdbg.Process.split_label( "kernel32!CreateFileA" )
|
|
1461
1434
|
|
|
1462
|
-
When called as an instance method, the fuzzy syntax mode is used::
|
|
1435
|
+
When called as an instance method, the fuzzy syntax mode is used::
|
|
1463
1436
|
|
|
1464
|
-
|
|
1437
|
+
aProcessInstance.split_label( "CreateFileA" )
|
|
1465
1438
|
|
|
1466
|
-
@see: L{split_label_strict}, L{split_label_fuzzy}
|
|
1439
|
+
@see: L{split_label_strict}, L{split_label_fuzzy}
|
|
1467
1440
|
|
|
1468
|
-
@type label: str
|
|
1469
|
-
@param label: Label to split.
|
|
1441
|
+
@type label: str
|
|
1442
|
+
@param label: Label to split.
|
|
1470
1443
|
|
|
1471
|
-
@rtype: tuple( str or None, str or int or None, int or None )
|
|
1472
|
-
@return:
|
|
1473
|
-
|
|
1474
|
-
|
|
1444
|
+
@rtype: tuple( str or None, str or int or None, int or None )
|
|
1445
|
+
@return:
|
|
1446
|
+
Tuple containing the C{module} name,
|
|
1447
|
+
the C{function} name or ordinal, and the C{offset} value.
|
|
1475
1448
|
|
|
1476
|
-
|
|
1477
|
-
|
|
1449
|
+
If the label doesn't specify a module,
|
|
1450
|
+
then C{module} is C{None}.
|
|
1478
1451
|
|
|
1479
|
-
|
|
1480
|
-
|
|
1452
|
+
If the label doesn't specify a function,
|
|
1453
|
+
then C{function} is C{None}.
|
|
1481
1454
|
|
|
1482
|
-
|
|
1483
|
-
|
|
1455
|
+
If the label doesn't specify an offset,
|
|
1456
|
+
then C{offset} is C{0}.
|
|
1484
1457
|
|
|
1485
|
-
@raise ValueError: The label is malformed.
|
|
1458
|
+
@raise ValueError: The label is malformed.
|
|
1486
1459
|
"""
|
|
1487
1460
|
|
|
1488
1461
|
# XXX
|
|
@@ -1497,7 +1470,8 @@ When called as an instance method, the fuzzy syntax mode is used::
|
|
|
1497
1470
|
def __use_fuzzy_mode(self, label):
|
|
1498
1471
|
"@see: L{split_label}"
|
|
1499
1472
|
return self.split_label_fuzzy(label)
|
|
1500
|
-
|
|
1473
|
+
|
|
1474
|
+
## __use_fuzzy_mode.__doc__ = split_label.__doc__
|
|
1501
1475
|
|
|
1502
1476
|
def sanitize_label(self, label):
|
|
1503
1477
|
"""
|
|
@@ -1548,9 +1522,7 @@ When called as an instance method, the fuzzy syntax mode is used::
|
|
|
1548
1522
|
# Return the memory address.
|
|
1549
1523
|
return address
|
|
1550
1524
|
|
|
1551
|
-
def resolve_label_components(self, module
|
|
1552
|
-
function = None,
|
|
1553
|
-
offset = None):
|
|
1525
|
+
def resolve_label_components(self, module=None, function=None, offset=None):
|
|
1554
1526
|
"""
|
|
1555
1527
|
Resolve the memory address of the given module, function and/or offset.
|
|
1556
1528
|
|
|
@@ -1639,7 +1611,7 @@ When called as an instance method, the fuzzy syntax mode is used::
|
|
|
1639
1611
|
address = address + offset
|
|
1640
1612
|
return address
|
|
1641
1613
|
|
|
1642
|
-
def get_label_at_address(self, address, offset
|
|
1614
|
+
def get_label_at_address(self, address, offset=None):
|
|
1643
1615
|
"""
|
|
1644
1616
|
Creates a label from the given memory address.
|
|
1645
1617
|
|
|
@@ -1665,7 +1637,7 @@ When called as an instance method, the fuzzy syntax mode is used::
|
|
|
1665
1637
|
label = self.parse_label(None, None, address)
|
|
1666
1638
|
return label
|
|
1667
1639
|
|
|
1668
|
-
|
|
1640
|
+
# ------------------------------------------------------------------------------
|
|
1669
1641
|
|
|
1670
1642
|
# The memory addresses of system breakpoints are be cached, since they're
|
|
1671
1643
|
# all in system libraries it's not likely they'll ever change their address
|
|
@@ -1693,8 +1665,7 @@ When called as an instance method, the fuzzy syntax mode is used::
|
|
|
1693
1665
|
"""
|
|
1694
1666
|
address = self.__get_system_breakpoint("ntdll!g_dwLastErrorToBreakOn")
|
|
1695
1667
|
if not address:
|
|
1696
|
-
address = self.__get_system_breakpoint(
|
|
1697
|
-
"kernel32!g_dwLastErrorToBreakOn")
|
|
1668
|
+
address = self.__get_system_breakpoint("kernel32!g_dwLastErrorToBreakOn")
|
|
1698
1669
|
# cheat a little :)
|
|
1699
1670
|
self.__system_breakpoints["ntdll!g_dwLastErrorToBreakOn"] = address
|
|
1700
1671
|
return address
|
|
@@ -1712,8 +1683,7 @@ When called as an instance method, the fuzzy syntax mode is used::
|
|
|
1712
1683
|
if address:
|
|
1713
1684
|
module = self.get_module_at_address(address)
|
|
1714
1685
|
if module:
|
|
1715
|
-
return module.match_name("ntdll")
|
|
1716
|
-
module.match_name("kernel32")
|
|
1686
|
+
return module.match_name("ntdll") or module.match_name("kernel32")
|
|
1717
1687
|
return False
|
|
1718
1688
|
|
|
1719
1689
|
# FIXME
|
|
@@ -1778,7 +1748,7 @@ When called as an instance method, the fuzzy syntax mode is used::
|
|
|
1778
1748
|
"""
|
|
1779
1749
|
return self.__get_system_breakpoint("ntdll32!DbgUiRemoteBreakin")
|
|
1780
1750
|
|
|
1781
|
-
|
|
1751
|
+
# ------------------------------------------------------------------------------
|
|
1782
1752
|
|
|
1783
1753
|
def load_symbols(self):
|
|
1784
1754
|
"""
|
|
@@ -1830,7 +1800,7 @@ When called as an instance method, the fuzzy syntax mode is used::
|
|
|
1830
1800
|
for symbol in aModule.iter_symbols():
|
|
1831
1801
|
yield symbol
|
|
1832
1802
|
|
|
1833
|
-
def resolve_symbol(self, symbol, bCaseSensitive
|
|
1803
|
+
def resolve_symbol(self, symbol, bCaseSensitive=False):
|
|
1834
1804
|
"""
|
|
1835
1805
|
Resolves a debugging symbol's address.
|
|
1836
1806
|
|
|
@@ -1845,12 +1815,12 @@ When called as an instance method, the fuzzy syntax mode is used::
|
|
|
1845
1815
|
@return: Memory address of symbol. C{None} if not found.
|
|
1846
1816
|
"""
|
|
1847
1817
|
if bCaseSensitive:
|
|
1848
|
-
for
|
|
1818
|
+
for SymbolName, SymbolAddress, SymbolSize in self.iter_symbols():
|
|
1849
1819
|
if symbol == SymbolName:
|
|
1850
1820
|
return SymbolAddress
|
|
1851
1821
|
else:
|
|
1852
1822
|
symbol = symbol.lower()
|
|
1853
|
-
for
|
|
1823
|
+
for SymbolName, SymbolAddress, SymbolSize in self.iter_symbols():
|
|
1854
1824
|
if symbol == SymbolName.lower():
|
|
1855
1825
|
return SymbolAddress
|
|
1856
1826
|
|
|
@@ -1871,7 +1841,7 @@ When called as an instance method, the fuzzy syntax mode is used::
|
|
|
1871
1841
|
# Any module may have symbols pointing anywhere in memory, so there's
|
|
1872
1842
|
# no easy way to optimize this. I guess we're stuck with brute force.
|
|
1873
1843
|
found = None
|
|
1874
|
-
for
|
|
1844
|
+
for SymbolName, SymbolAddress, SymbolSize in self.iter_symbols():
|
|
1875
1845
|
if SymbolAddress > address:
|
|
1876
1846
|
continue
|
|
1877
1847
|
|
|
@@ -1885,7 +1855,8 @@ When called as an instance method, the fuzzy syntax mode is used::
|
|
|
1885
1855
|
else:
|
|
1886
1856
|
found = (SymbolName, SymbolAddress, SymbolSize)
|
|
1887
1857
|
return found
|
|
1888
|
-
|
|
1858
|
+
|
|
1859
|
+
# ------------------------------------------------------------------------------
|
|
1889
1860
|
|
|
1890
1861
|
# XXX _notify_* methods should not trigger a scan
|
|
1891
1862
|
|
|
@@ -1896,17 +1867,17 @@ When called as an instance method, the fuzzy syntax mode is used::
|
|
|
1896
1867
|
@type aModule: L{Module}
|
|
1897
1868
|
@param aModule: Module object.
|
|
1898
1869
|
"""
|
|
1899
|
-
## if not isinstance(aModule, Module):
|
|
1900
|
-
## if hasattr(aModule, '__class__'):
|
|
1901
|
-
## typename = aModule.__class__.__name__
|
|
1902
|
-
## else:
|
|
1903
|
-
## typename = str(type(aModule))
|
|
1904
|
-
## msg = "Expected Module, got %s instead" % typename
|
|
1905
|
-
## raise TypeError(msg)
|
|
1870
|
+
## if not isinstance(aModule, Module):
|
|
1871
|
+
## if hasattr(aModule, '__class__'):
|
|
1872
|
+
## typename = aModule.__class__.__name__
|
|
1873
|
+
## else:
|
|
1874
|
+
## typename = str(type(aModule))
|
|
1875
|
+
## msg = "Expected Module, got %s instead" % typename
|
|
1876
|
+
## raise TypeError(msg)
|
|
1906
1877
|
lpBaseOfDll = aModule.get_base()
|
|
1907
|
-
## if lpBaseOfDll in self.__moduleDict:
|
|
1908
|
-
## msg = "Module already exists: %d" % lpBaseOfDll
|
|
1909
|
-
## raise KeyError(msg)
|
|
1878
|
+
## if lpBaseOfDll in self.__moduleDict:
|
|
1879
|
+
## msg = "Module already exists: %d" % lpBaseOfDll
|
|
1880
|
+
## raise KeyError(msg)
|
|
1910
1881
|
aModule.set_process(self)
|
|
1911
1882
|
self.__moduleDict[lpBaseOfDll] = aModule
|
|
1912
1883
|
|
|
@@ -1925,7 +1896,7 @@ When called as an instance method, the fuzzy syntax mode is used::
|
|
|
1925
1896
|
msg = "Unknown base address %d" % HexDump.address(lpBaseOfDll)
|
|
1926
1897
|
warnings.warn(msg, RuntimeWarning)
|
|
1927
1898
|
if aModule:
|
|
1928
|
-
aModule.clear()
|
|
1899
|
+
aModule.clear() # remove circular references
|
|
1929
1900
|
|
|
1930
1901
|
def __add_loaded_module(self, event):
|
|
1931
1902
|
"""
|
|
@@ -1935,29 +1906,25 @@ When called as an instance method, the fuzzy syntax mode is used::
|
|
|
1935
1906
|
@param event: Event object.
|
|
1936
1907
|
"""
|
|
1937
1908
|
lpBaseOfDll = event.get_module_base()
|
|
1938
|
-
hFile
|
|
1939
|
-
## if not self.has_module(lpBaseOfDll): # XXX this would trigger a scan
|
|
1909
|
+
hFile = event.get_file_handle()
|
|
1910
|
+
## if not self.has_module(lpBaseOfDll): # XXX this would trigger a scan
|
|
1940
1911
|
if lpBaseOfDll not in self.__moduleDict:
|
|
1941
1912
|
fileName = event.get_filename()
|
|
1942
1913
|
if not fileName:
|
|
1943
1914
|
fileName = None
|
|
1944
|
-
if hasattr(event,
|
|
1915
|
+
if hasattr(event, "get_start_address"):
|
|
1945
1916
|
EntryPoint = event.get_start_address()
|
|
1946
1917
|
else:
|
|
1947
1918
|
EntryPoint = None
|
|
1948
|
-
aModule
|
|
1949
|
-
EntryPoint = EntryPoint,
|
|
1950
|
-
process = self)
|
|
1919
|
+
aModule = Module(lpBaseOfDll, hFile, fileName=fileName, EntryPoint=EntryPoint, process=self)
|
|
1951
1920
|
self._add_module(aModule)
|
|
1952
1921
|
else:
|
|
1953
1922
|
aModule = self.get_module(lpBaseOfDll)
|
|
1954
|
-
if not aModule.hFile and hFile not in (None, 0,
|
|
1955
|
-
win32.INVALID_HANDLE_VALUE):
|
|
1923
|
+
if not aModule.hFile and hFile not in (None, 0, win32.INVALID_HANDLE_VALUE):
|
|
1956
1924
|
aModule.hFile = hFile
|
|
1957
1925
|
if not aModule.process:
|
|
1958
1926
|
aModule.process = self
|
|
1959
|
-
if aModule.EntryPoint is None and
|
|
1960
|
-
hasattr(event, 'get_start_address'):
|
|
1927
|
+
if aModule.EntryPoint is None and hasattr(event, "get_start_address"):
|
|
1961
1928
|
aModule.EntryPoint = event.get_start_address()
|
|
1962
1929
|
if not aModule.fileName:
|
|
1963
1930
|
fileName = event.get_filename()
|
|
@@ -2010,7 +1977,7 @@ When called as an instance method, the fuzzy syntax mode is used::
|
|
|
2010
1977
|
@return: C{True} to call the user-defined handle, C{False} otherwise.
|
|
2011
1978
|
"""
|
|
2012
1979
|
lpBaseOfDll = event.get_module_base()
|
|
2013
|
-
## if self.has_module(lpBaseOfDll): # XXX this would trigger a scan
|
|
1980
|
+
## if self.has_module(lpBaseOfDll): # XXX this would trigger a scan
|
|
2014
1981
|
if lpBaseOfDll in self.__moduleDict:
|
|
2015
1982
|
self._del_module(lpBaseOfDll)
|
|
2016
1983
|
return True
|