From 65330a7a093ea95fbd288652fab39a84ca15d65c Mon Sep 17 00:00:00 2001 From: ValekoZ Date: Wed, 5 Jun 2024 13:48:42 +0200 Subject: [PATCH] Add support for virtualenv Add a `gef.virtualenv_path` config var, and activate it at startup. --- gef.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/gef.py b/gef.py index c713c62ef..8c865e1e6 100644 --- a/gef.py +++ b/gef.py @@ -9854,6 +9854,9 @@ def __init__(self) -> None: plugins_dir = GefSetting("", str, "Autoload additional GEF commands from external directory", hooks={"on_write": [GefSetting.no_spaces, ]}) plugins_dir.add_hook("on_changed", [lambda _, new_val: GefSetting.must_exist(new_val), lambda _, new_val: self.load_extra_plugins(new_val), ]) gef.config["gef.extra_plugins_dir"] = plugins_dir + venv_path = GefSetting("", str, "Path to the virtualenv used by GEF", hooks={"on_write": [GefSetting.no_spaces, ]}) + venv_path.add_hook("on_changed", [lambda _, new_val: GefSetting.must_exist(new_val), lambda _, new_val: self.load_virtualenv(new_val), ]) + gef.config["gef.virtualenv_path"] = venv_path gef.config["gef.disable_color"] = GefSetting(False, bool, "Disable all colors in GEF") gef.config["gef.tempdir"] = GefSetting(GEF_TEMP_DIR, pathlib.Path, "Directory to use for temporary/cache content", hooks={"on_write": [GefSetting.no_spaces, GefSetting.create_folder_tree]}) gef.config["gef.show_deprecation_warnings"] = GefSetting(True, bool, "Toggle the display of the `deprecated` warnings") @@ -9943,6 +9946,13 @@ def load_plugins_from_directory(plugin_directory: pathlib.Path): dbg(f"Loading extra plugins from directory={directory}") return load_plugins_from_directory(directory) + + def load_virtualenv(self, new_path: Optional[pathlib.Path] = None): + path = new_path or pathlib.Path(gef.config["gef.virtualenv_path"]) + activate_script_path = path / "bin" / "activate_this.py" + if path: + exec(open(activate_script_path).read(), {'__file__': activate_script_path}) + @property def loaded_command_names(self) -> Iterable[str]: print("obsolete loaded_command_names") @@ -11717,6 +11727,9 @@ def target_remote_posthook(): gef.gdb.load() gef.gdb.show_banner() + # load venv + gef.gdb.load_virtualenv() + # load config gef.gdb.load_extra_plugins()