Skip to content

Commit

Permalink
Merge c5f5df8 into bba5f1c
Browse files Browse the repository at this point in the history
  • Loading branch information
Grazfather committed Aug 26, 2023
2 parents bba5f1c + c5f5df8 commit 528b630
Showing 1 changed file with 13 additions and 11 deletions.
24 changes: 13 additions & 11 deletions gef.py
Original file line number Diff line number Diff line change
Expand Up @@ -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")

Expand Down Expand Up @@ -1935,8 +1935,9 @@ def __exit__(self, *exc: Any) -> None:


class RedirectOutputContext:
def __init__(self, to: str = "/dev/null") -> None:
self.redirection_target_file = to
def __init__(self, to_file: str = "/dev/null") -> None:
if " " in to_file: raise Exception("Target filepath cannot contain spaces")
self.redirection_target_file = to_file
return

def __enter__(self) -> None:
Expand All @@ -1956,6 +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`."""
if " " in to_file: raise Exception("Target filepath cannot contain spaces")
gdb.execute("set logging overwrite")
gdb.execute(f"set logging file {to_file}")
gdb.execute("set logging redirect on")
Expand Down Expand Up @@ -3402,7 +3404,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
Expand Down Expand Up @@ -8786,7 +8788,7 @@ def get_frames_size(self) -> int:
def trace(self, loc_start: int, loc_end: int, depth: int) -> None:
info(f"Tracing from {loc_start:#x} to {loc_end:#x} (max depth={depth:d})")
logfile = f"{self['tracefile_prefix']}{loc_start:#x}-{loc_end:#x}.txt"
with RedirectOutputContext(to=logfile):
with RedirectOutputContext(to_file=logfile):
hide_context()
self.start_tracing(loc_start, loc_end, depth)
unhide_context()
Expand Down Expand Up @@ -9184,7 +9186,7 @@ def do_invoke(self, _: List[str]) -> None:

nb_installed_breaks = 0

with RedirectOutputContext(to="/dev/null"):
with RedirectOutputContext(to_file="/dev/null"):
for function_name in dangerous_functions:
argument_number = dangerous_functions[function_name]
FormatStringBreakpoint(function_name, argument_number)
Expand Down Expand Up @@ -9536,7 +9538,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
Expand Down Expand Up @@ -10144,8 +10146,8 @@ 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}")
Expand All @@ -10168,7 +10170,7 @@ 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:
Expand Down Expand Up @@ -11104,7 +11106,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:
Expand Down

0 comments on commit 528b630

Please sign in to comment.