Skip to content

Commit

Permalink
Variadic gef print (#789)
Browse files Browse the repository at this point in the history
* Make gef_print variadic

* xxx comment suggestions

Co-authored-by: hugsy <hugsy@users.noreply.github.com>
  • Loading branch information
Grazfather and hugsy committed Jan 21, 2022
1 parent c6909e1 commit eaf9d11
Showing 1 changed file with 46 additions and 39 deletions.
85 changes: 46 additions & 39 deletions gef.py
Original file line number Diff line number Diff line change
Expand Up @@ -229,12 +229,15 @@ def highlight_text(text: str) -> str:
return "".join(ansiSplit)


def gef_print(x: str = "", *args: Any, **kwargs: Any) -> Optional[int]:
"""Wrapper around `print()`, using string buffering feature."""
x = highlight_text(x)
def gef_print(*args: str, end="\n", sep=" ", **kwargs: Any) -> None:
"""Wrapper around print(), using string buffering feature."""
parts = [highlight_text(a) for a in args]
if gef.ui.stream_buffer and not is_debug():
return gef.ui.stream_buffer.write(x + kwargs.get("end", "\n"))
print(x, *args, **kwargs)
gef.ui.stream_buffer.write(sep.join(parts) + end)
return

print(*parts, sep=sep, end=end, **kwargs)
return


def bufferize(f: Callable) -> Callable:
Expand Down Expand Up @@ -1560,20 +1563,24 @@ def titlify(text: str, color: Optional[str] = None, msg_color: Optional[str] = N
return "".join(msg)


def err(msg: str) -> Optional[int]:
return gef_print(f"{Color.colorify('[!]', 'bold red')} {msg}")
def err(msg: str) -> None:
gef_print(f"{Color.colorify('[!]', 'bold red')} {msg}")
return


def warn(msg: str) -> Optional[int]:
return gef_print(f"{Color.colorify('[*]', 'bold yellow')} {msg}")
def warn(msg: str) -> None:
gef_print(f"{Color.colorify('[*]', 'bold yellow')} {msg}")
return


def ok(msg: str) -> Optional[int]:
return gef_print(f"{Color.colorify('[+]', 'bold green')} {msg}")
def ok(msg: str) -> None:
gef_print(f"{Color.colorify('[+]', 'bold green')} {msg}")
return


def info(msg: str) -> Optional[int]:
return gef_print(f"{Color.colorify('[+]', 'bold blue')} {msg}")
def info(msg: str) -> None:
gef_print(f"{Color.colorify('[+]', 'bold blue')} {msg}")
return


def push_context_message(level: str, message: str) -> None:
Expand Down Expand Up @@ -5062,18 +5069,18 @@ def show_info_proc(self) -> None:
info("Process Information")
pid = gef.session.pid
cmdline = self.get_cmdline_of(pid)
gef_print(f"\tPID {RIGHT_ARROW} {pid}")
gef_print(f"\tExecutable {RIGHT_ARROW} {self.get_process_path_of(pid)}")
gef_print(f"\tCommand line {RIGHT_ARROW} '{cmdline}'")
gef_print(f"\tPID {RIGHT_ARROW} {pid}",
f"\tExecutable {RIGHT_ARROW} {self.get_process_path_of(pid)}",
f"\tCommand line {RIGHT_ARROW} '{cmdline}'", sep="\n")
return

def show_ancestor(self) -> None:
info("Parent Process Information")
ppid = int(self.get_state_of(gef.session.pid)["PPid"])
state = self.get_state_of(ppid)
cmdline = self.get_cmdline_of(ppid)
gef_print(f"\tParent PID {RIGHT_ARROW} {state['Pid']}")
gef_print(f"\tCommand line {RIGHT_ARROW} '{cmdline}'")
gef_print(f"\tParent PID {RIGHT_ARROW} {state['Pid']}",
f"\tCommand line {RIGHT_ARROW} '{cmdline}'", sep="\n")
return

def show_descendants(self) -> None:
Expand Down Expand Up @@ -8022,7 +8029,8 @@ def do_invoke(self, _: List[str], **kwargs: Any) -> None:
if s.sh_flags & Shdr.SHF_COMPRESSED: sh_flags += "C"

gef_print(" [{:2d}] {:20s} {:>15s} {:#10x} {:#8x} {:#8x} {:#8x} {:5s} {:#4x} {:#4x} {:#8x}".format(
i, s.sh_name, sh_type, s.sh_addr, s.sh_offset, s.sh_size, s.sh_entsize, sh_flags, s.sh_link, s.sh_info, s.sh_addralign))
i, s.sh_name, sh_type, s.sh_addr, s.sh_offset, s.sh_size,
s.sh_entsize, sh_flags, s.sh_link, s.sh_info, s.sh_addralign))
return


Expand Down Expand Up @@ -8204,8 +8212,7 @@ def show_legend(self) -> None:
Color.colorify("Code", code_addr_color),
Color.colorify("Heap", heap_addr_color),
Color.colorify("Stack", stack_addr_color),
Color.colorify("String", str_color)
))
Color.colorify("String", str_color)))
return

@only_if_gdb_running
Expand Down Expand Up @@ -9573,16 +9580,16 @@ def infos(self, address: int) -> None:

if sect:
gef_print(f"Page: {format_address(sect.page_start)} {RIGHT_ARROW} "
f"{format_address(sect.page_end)} (size={sect.page_end-sect.page_start:#x})")
gef_print(f"Permissions: {sect.permission}")
gef_print(f"Pathname: {sect.path}")
gef_print(f"Offset (from page): {addr.value-sect.page_start:#x}")
gef_print(f"Inode: {sect.inode}")
f"{format_address(sect.page_end)} (size={sect.page_end-sect.page_start:#x})"
f"\nPermissions: {sect.permission}"
f"\nPathname: {sect.path}"
f"\nOffset (from page): {addr.value-sect.page_start:#x}"
f"\nInode: {sect.inode}")

if info:
gef_print(f"Segment: {info.name} "
f"({format_address(info.zone_start)}-{format_address(info.zone_end)})")
gef_print(f"Offset (from segment): {addr.value-info.zone_start:#x}")
f"({format_address(info.zone_start)}-{format_address(info.zone_end)})"
f"\nOffset (from segment): {addr.value-info.zone_start:#x}")

sym = gdb_get_location_from_symbol(address)
if sym:
Expand Down Expand Up @@ -9726,13 +9733,13 @@ def start_tracing(self, loc_start: int, loc_end: int, depth: int) -> None:
loc_cur = loc_start
frame_count_init = self.get_frames_size()

gef_print("#")
gef_print(f"# Execution tracing of {get_filepath()}")
gef_print(f"# Start address: {format_address(loc_start)}")
gef_print(f"# End address: {format_address(loc_end)}")
gef_print(f"# Recursion level: {depth:d}")
gef_print("# automatically generated by gef.py")
gef_print("#\n")
gef_print("#",
f"# Execution tracing of {get_filepath()}",
f"# Start address: {format_address(loc_start)}",
f"# End address: {format_address(loc_end)}",
f"# Recursion level: {depth:d}",
"# automatically generated by gef.py",
"#\n", sep="\n")

while loc_cur != loc_end:
try:
Expand All @@ -9747,10 +9754,10 @@ def start_tracing(self, loc_start: int, loc_end: int, depth: int) -> None:
gdb.flush()

except gdb.error as e:
gef_print("#")
gef_print(f"# Execution interrupted at address {format_address(loc_cur)}")
gef_print(f"# Exception: {e}")
gef_print("#\n")
gef_print("#",
f"# Execution interrupted at address {format_address(loc_cur)}",
f"# Exception: {e}",
"#\n", sep="\n")
break

return
Expand Down

0 comments on commit eaf9d11

Please sign in to comment.