Refactor, move function to global scope and ensure frame exists in register set

pull/1929/head
OB 2 years ago committed by Disconnect3d
parent 6a45c854e8
commit 0451daebcc

@ -191,17 +191,9 @@ def telescope(address=None, count=telescope_lines, to_string=False, reverse=Fals
result.extend(collapse_buffer)
collapse_buffer.clear()
bp = pwndbg.gdblib.regs[pwndbg.gdblib.regs.frame]
def regs_or_frame_offset(addr):
offset = addr - bp
# len(regs[addr]) == 1 if no registers pointer to address
if not print_framepointer_offset or len(regs[addr]) > 1 or not -0xFFF <= offset <= 0xFFF:
return " " + T.register(regs[addr].ljust(longest_regs))
else:
# If offset to frame pointer as hex fits in hex 3 digits, print it
return ("%+04x" % (offset)).ljust(longest_regs + 1)
bp = None
if print_framepointer_offset and pwndbg.gdblib.regs.frame is not None:
bp = pwndbg.gdblib.regs[pwndbg.gdblib.regs.frame]
for i, addr in enumerate(range(start, stop, step)):
if not pwndbg.gdblib.memory.peek(addr):
@ -217,11 +209,9 @@ def telescope(address=None, count=telescope_lines, to_string=False, reverse=Fals
addr - start + (telescope.offset * ptrsize),
separator,
)
)
line += " ".join(
) + " ".join(
(
regs_or_frame_offset(addr),
regs_or_frame_offset(addr, bp, regs, longest_regs),
pwndbg.chain.format(addr),
)
)
@ -247,6 +237,16 @@ def telescope(address=None, count=telescope_lines, to_string=False, reverse=Fals
return result
def regs_or_frame_offset(addr: int, bp: int | None, regs: dict[int, str], longest_regs: int) -> str:
# bp only set if print_framepointer_offset=True
# len(regs[addr]) == 1 if no registers pointer to address
if bp is None or len(regs[addr]) > 1 or not -0xFFF <= addr - bp <= 0xFFF:
return " " + T.register(regs[addr].ljust(longest_regs))
else:
# If offset to frame pointer as hex fits in hex 3 digits, print it
return ("%+04x" % (addr - bp)).ljust(longest_regs + 1)
parser = argparse.ArgumentParser(
description="Dereferences on stack data with specified count and offset."
)

Loading…
Cancel
Save