Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Variadic gef print #789

Merged
merged 7 commits into from
Jan 21, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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}")
theguy147 marked this conversation as resolved.
Show resolved Hide resolved

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}")
theguy147 marked this conversation as resolved.
Show resolved Hide resolved

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