From bfec2961e511bcae81d90eba7eab945a31bc1547 Mon Sep 17 00:00:00 2001 From: Grazfather Date: Thu, 24 Aug 2023 20:25:33 -0400 Subject: [PATCH] Fix gdb.execute not quoting paths --- gef.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/gef.py b/gef.py index 5435c79e6..864a5d5e1 100644 --- a/gef.py +++ b/gef.py @@ -1815,7 +1815,7 @@ def _show_code_line(fname: str, idx: int) -> str: try: lsb_release = which("lsb_release") - gdb.execute(f"!{lsb_release} -a") + gdb.execute(f"!'{lsb_release}' -a") except FileNotFoundError: gef_print("lsb_release is missing, cannot collect additional debug information") @@ -1942,7 +1942,7 @@ def __init__(self, to: str = "/dev/null") -> None: def __enter__(self) -> None: """Redirect all GDB output to `to_file` parameter. By default, `to_file` redirects to `/dev/null`.""" gdb.execute("set logging overwrite") - gdb.execute(f"set logging file {self.redirection_target_file}") + gdb.execute(f"set logging file '{self.redirection_target_file}'") gdb.execute("set logging redirect on") gdb.execute("set logging on") return @@ -1957,7 +1957,7 @@ def __exit__(self, *exc: Any) -> None: def enable_redirect_output(to_file: str = "/dev/null") -> None: """Redirect all GDB output to `to_file` parameter. By default, `to_file` redirects to `/dev/null`.""" gdb.execute("set logging overwrite") - gdb.execute(f"set logging file {to_file}") + gdb.execute(f"set logging file '{to_file}'") gdb.execute("set logging redirect on") gdb.execute("set logging on") return @@ -2138,7 +2138,7 @@ def gef_execute_gdb_script(commands: str) -> None: fname = pathlib.Path(fname) if fname.is_file() and os.access(fname, os.R_OK): - gdb.execute(f"source {fname}") + gdb.execute(f"source '{fname}'") fname.unlink() return @@ -3402,7 +3402,7 @@ def get_filepath() -> Optional[str]: def get_function_length(sym: str) -> int: """Attempt to get the length of the raw bytes of a function.""" - dis = gdb.execute(f"disassemble {sym}", to_string=True).splitlines() + dis = gdb.execute(f"disassemble '{sym}'", to_string=True).splitlines() start_addr = int(dis[1].split()[0], 16) end_addr = int(dis[-2].split()[0], 16) return end_addr - start_addr @@ -9536,7 +9536,7 @@ def load_extra_plugins(self) -> int: def load_plugin(fpath: pathlib.Path) -> bool: try: dbg(f"Loading '{fpath}'") - gdb.execute(f"source {fpath}") + gdb.execute(f"source '{fpath}'") except Exception as e: warn(f"Exception while loading {fpath}: {str(e)}") return False @@ -10144,11 +10144,11 @@ def tmux_setup(self) -> None: pane, pty = subprocess.check_output([tmux, "splitw", "-h", '-F#{session_name}:#{window_index}.#{pane_index}-#{pane_tty}', "-P"]).decode().strip().split("-") atexit.register(lambda : subprocess.run([tmux, "kill-pane", "-t", pane])) # clear the screen and let it wait for input forever - gdb.execute(f"! {tmux} send-keys -t {pane} 'clear ; cat' C-m") - gdb.execute(f"! {tmux} select-pane -L") + gdb.execute(f"!'{tmux}' send-keys -t {pane} 'clear ; cat' C-m") + gdb.execute(f"!'{tmux}' select-pane -L") ok(f"Setting `context.redirect` to '{pty}'...") - gdb.execute(f"gef config context.redirect {pty}") + gdb.execute(f"gef config context.redirect '{pty}'") ok("Done!") return @@ -10168,13 +10168,13 @@ def screen_setup(self) -> None: f.write(f"screen bash -c 'tty > {tty_path}; clear; cat'\n") f.write("focus left\n") - gdb.execute(f"! {screen} -r {sty} -m -d -X source {script_path}") + gdb.execute(f"!'{screen}' -r '{sty}' -m -d -X source '{script_path}'") # artificial delay to make sure `tty_path` is populated time.sleep(0.25) with open(tty_path, "r") as f: pty = f.read().strip() ok(f"Setting `context.redirect` to '{pty}'...") - gdb.execute(f"gef config context.redirect {pty}") + gdb.execute(f"gef config context.redirect '{pty}'") ok("Done!") os.unlink(script_path) os.unlink(tty_path) @@ -10231,7 +10231,7 @@ def __install_extras_script(self, script: str) -> bool: fd.flush() old_command_set = set(gef.gdb.commands) - gdb.execute(f"source {fpath}") + gdb.execute(f"source '{fpath}'") new_command_set = set(gef.gdb.commands) new_commands = [f"`{c[0]}`" for c in (new_command_set - old_command_set)] ok(f"Installed file '{fpath}', new command(s) available: {', '.join(new_commands)}") @@ -11104,7 +11104,7 @@ def setup(self) -> None: self.gdb.setup() tempdir = self.config["gef.tempdir"] gef_makedirs(tempdir) - gdb.execute(f"save gdb-index {tempdir}") + gdb.execute(f"save gdb-index '{tempdir}'") return def reset_caches(self) -> None: @@ -11201,4 +11201,4 @@ def reset_caches(self) -> None: # restore saved breakpoints (if any) bkp_fpath = pathlib.Path(gef.config["gef.autosave_breakpoints_file"]).expanduser().absolute() if bkp_fpath.exists() and bkp_fpath.is_file(): - gdb.execute(f"source {bkp_fpath}") + gdb.execute(f"source '{bkp_fpath}'")