From 2eccf02b50579387de66e990139a33db693f6f91 Mon Sep 17 00:00:00 2001 From: Gulshan Singh Date: Fri, 7 Oct 2022 15:41:24 -0700 Subject: [PATCH] GDB Refactor [15/N]: Move stack.py to gdblib/stack.py (#1244) --- pwndbg/__init__.py | 1 - pwndbg/auxv.py | 4 ++-- pwndbg/commands/canary.py | 2 +- pwndbg/commands/xinfo.py | 4 ++-- pwndbg/elf.py | 1 - pwndbg/{ => gdblib}/stack.py | 3 ++- pwndbg/symbol.py | 4 ++-- pwndbg/vmmap.py | 6 +++--- tests/test_memory.py | 4 ++-- 9 files changed, 14 insertions(+), 15 deletions(-) rename pwndbg/{ => gdblib}/stack.py (97%) diff --git a/pwndbg/__init__.py b/pwndbg/__init__.py index 881f94cdd..626f50c63 100755 --- a/pwndbg/__init__.py +++ b/pwndbg/__init__.py @@ -25,7 +25,6 @@ import pwndbg.heap import pwndbg.lib.version import pwndbg.net import pwndbg.proc -import pwndbg.stack import pwndbg.tls import pwndbg.ui import pwndbg.vmmap diff --git a/pwndbg/auxv.py b/pwndbg/auxv.py index 55b6674b4..d56d43bc9 100644 --- a/pwndbg/auxv.py +++ b/pwndbg/auxv.py @@ -11,8 +11,8 @@ import pwndbg.gdblib.info import pwndbg.gdblib.memory import pwndbg.gdblib.qemu import pwndbg.gdblib.regs +import pwndbg.gdblib.stack import pwndbg.gdblib.typeinfo -import pwndbg.stack example_info_auxv_linux = """ 33 AT_SYSINFO_EHDR System-supplied DSO's ELF header 0x7ffff7ffa000 @@ -257,7 +257,7 @@ def _get_execfn(): # 32e:1970| 0x7fffffffeff0 <-- 0x6f732e646c2f67 /* 'g/ld.so' */ # 32f:1978| 0x7fffffffeff8 <-- 0 # 330:1980| 0x7ffffffff000 - addr = pwndbg.stack.find_upper_stack_boundary(pwndbg.gdblib.regs.sp) + addr = pwndbg.gdblib.stack.find_upper_stack_boundary(pwndbg.gdblib.regs.sp) while pwndbg.gdblib.memory.byte(addr - 1) == 0: addr -= 1 diff --git a/pwndbg/commands/canary.py b/pwndbg/commands/canary.py index 7ac9f3e03..68df2315d 100644 --- a/pwndbg/commands/canary.py +++ b/pwndbg/commands/canary.py @@ -37,7 +37,7 @@ def canary(): stack_canaries = list( pwndbg.search.search( - pwndbg.gdblib.arch.pack(global_canary), mappings=pwndbg.stack.stacks.values() + pwndbg.gdblib.arch.pack(global_canary), mappings=pwndbg.gdblib.stack.stacks.values() ) ) diff --git a/pwndbg/commands/xinfo.py b/pwndbg/commands/xinfo.py index 0ee299040..394ae9ee3 100644 --- a/pwndbg/commands/xinfo.py +++ b/pwndbg/commands/xinfo.py @@ -6,7 +6,7 @@ import pwndbg.config import pwndbg.gdblib.arch import pwndbg.gdblib.memory import pwndbg.gdblib.regs -import pwndbg.stack +import pwndbg.gdblib.stack import pwndbg.vmmap import pwndbg.wrappers @@ -49,7 +49,7 @@ def xinfo_stack(page, addr): if canary_value is not None: all_canaries = list( pwndbg.search.search( - pwndbg.gdblib.arch.pack(canary_value), mappings=pwndbg.stack.stacks.values() + pwndbg.gdblib.arch.pack(canary_value), mappings=pwndbg.gdblib.stack.stacks.values() ) ) follow_canaries = sorted(filter(lambda a: a > addr, all_canaries)) diff --git a/pwndbg/elf.py b/pwndbg/elf.py index b76c4c441..13de64e56 100644 --- a/pwndbg/elf.py +++ b/pwndbg/elf.py @@ -24,7 +24,6 @@ import pwndbg.gdblib.memory import pwndbg.lib.elftypes import pwndbg.lib.memoize import pwndbg.proc -import pwndbg.stack # ELF constants PF_X, PF_W, PF_R = 1, 2, 4 diff --git a/pwndbg/stack.py b/pwndbg/gdblib/stack.py similarity index 97% rename from pwndbg/stack.py rename to pwndbg/gdblib/stack.py index cd5631c82..6aa76495e 100644 --- a/pwndbg/stack.py +++ b/pwndbg/gdblib/stack.py @@ -9,6 +9,7 @@ binaries do things to remap the stack (e.g. pwnies' postit). import gdb import pwndbg.elf +import pwndbg.gdblib.abi import pwndbg.gdblib.events import pwndbg.gdblib.memory import pwndbg.lib.memoize @@ -42,7 +43,7 @@ def find_upper_stack_boundary(stack_ptr, max_pages=1024): # We can't get the stack size from stack layout and page fault on bare metal mode, # so we return current page as a walkaround. if not pwndbg.gdblib.abi.linux: - return stack_ptr + pwndbg.lib.memory.PAGE_SIZE + return stack_ptr + pwndbg.gdblib.memory.PAGE_SIZE return pwndbg.gdblib.memory.find_upper_boundary(stack_ptr, max_pages) diff --git a/pwndbg/symbol.py b/pwndbg/symbol.py index 4a7e039f4..ff65fd62a 100644 --- a/pwndbg/symbol.py +++ b/pwndbg/symbol.py @@ -24,9 +24,9 @@ import pwndbg.gdblib.events import pwndbg.gdblib.memory import pwndbg.gdblib.qemu import pwndbg.gdblib.remote +import pwndbg.gdblib.stack import pwndbg.ida import pwndbg.lib.memoize -import pwndbg.stack import pwndbg.vmmap @@ -163,7 +163,7 @@ def get(address, gdb_only=False): return "" # Don't look up stack addresses - if pwndbg.stack.find(address): + if pwndbg.gdblib.stack.find(address): return "" # This sucks, but there's not a GDB API for this. diff --git a/pwndbg/vmmap.py b/pwndbg/vmmap.py index 360a463de..9efb826af 100644 --- a/pwndbg/vmmap.py +++ b/pwndbg/vmmap.py @@ -18,10 +18,10 @@ import pwndbg.gdblib.memory import pwndbg.gdblib.qemu import pwndbg.gdblib.regs import pwndbg.gdblib.remote +import pwndbg.gdblib.stack import pwndbg.gdblib.typeinfo import pwndbg.lib.memoize import pwndbg.proc -import pwndbg.stack # List of manually-explored pages which were discovered # by analyzing the stack or register context. @@ -95,7 +95,7 @@ def get(): return (pwndbg.lib.memory.Page(0, pwndbg.gdblib.arch.ptrmask, 7, 0, "[qemu]"),) pages.extend(info_files()) - pages.extend(pwndbg.stack.stacks.values()) + pages.extend(pwndbg.gdblib.stack.stacks.values()) pages.extend(explored_pages) pages.extend(custom_pages) @@ -143,7 +143,7 @@ def explore(address_maybe): return None flags |= 2 if pwndbg.gdblib.memory.poke(address_maybe) else 0 - flags |= 1 if not pwndbg.stack.nx else 0 + flags |= 1 if not pwndbg.gdblib.stack.nx else 0 page = find_boundaries(address_maybe) page.objfile = "" diff --git a/tests/test_memory.py b/tests/test_memory.py index 59cebcbdf..2584eebc0 100644 --- a/tests/test_memory.py +++ b/tests/test_memory.py @@ -1,5 +1,5 @@ import pwndbg.gdblib.memory -import pwndbg.stack +import pwndbg.gdblib.stack import tests REFERENCE_BINARY = tests.binaries.get("reference-binary.out") @@ -10,7 +10,7 @@ def test_memory_read_write(start_binary): Tests simple pwndbg's memory read/write operations with different argument types """ start_binary(REFERENCE_BINARY) - stack_addr = next(iter(pwndbg.stack.stacks.values())).vaddr + stack_addr = next(iter(pwndbg.gdblib.stack.stacks.values())).vaddr # Testing write(addr, str) val = "X" * 50