diff --git a/pwndbg/auxv.py b/pwndbg/auxv.py index 0a340575d..f2a628e76 100644 --- a/pwndbg/auxv.py +++ b/pwndbg/auxv.py @@ -15,6 +15,7 @@ import pwndbg.arch import pwndbg.events import pwndbg.info import pwndbg.memory +import pwndbg.qemu import pwndbg.regs import pwndbg.stack import pwndbg.typeinfo @@ -149,6 +150,9 @@ def find_stack_boundary(addr): return addr def walk_stack(): + if pwndbg.qemu.is_qemu_kernel(): + return None + auxv = walk_stack2(0) if not auxv: diff --git a/pwndbg/memory.py b/pwndbg/memory.py index ff0646e06..dc96e8b0b 100644 --- a/pwndbg/memory.py +++ b/pwndbg/memory.py @@ -146,6 +146,8 @@ def find_upper_boundary(addr, max_pages=1024): # import sys # sys.stdout.write(hex(addr) + '\n') addr += pwndbg.memory.PAGE_SIZE + if addr > pwndbg.arch.ptrmask: + break except gdb.MemoryError: pass return addr @@ -156,6 +158,8 @@ def find_lower_boundary(addr, max_pages=1024): for i in range(max_pages): pwndbg.memory.read(addr, 1) addr -= pwndbg.memory.PAGE_SIZE + if addr < 0: + break except gdb.MemoryError: pass return addr diff --git a/pwndbg/qemu.py b/pwndbg/qemu.py index a6c3d8174..351d637c6 100644 --- a/pwndbg/qemu.py +++ b/pwndbg/qemu.py @@ -54,6 +54,10 @@ def is_qemu_usermode(): return is_qemu() and is_usermode() +@pwndbg.memoize.reset_on_stop +def is_qemu_kernel(): + return is_qemu() and not is_usermode() + @pwndbg.events.start @pwndbg.memoize.reset_on_stop def root():