Handle QEMU kernels better, especially ARM kernels

- When examining the bounds of a mapping, do not wrap the address space
- Do not attempt to walk the stack looking for AUXV
pull/172/head
Zach Riggle 9 years ago
parent 37b8b19c34
commit 51a485477e

@ -15,6 +15,7 @@ import pwndbg.arch
import pwndbg.events import pwndbg.events
import pwndbg.info import pwndbg.info
import pwndbg.memory import pwndbg.memory
import pwndbg.qemu
import pwndbg.regs import pwndbg.regs
import pwndbg.stack import pwndbg.stack
import pwndbg.typeinfo import pwndbg.typeinfo
@ -149,6 +150,9 @@ def find_stack_boundary(addr):
return addr return addr
def walk_stack(): def walk_stack():
if pwndbg.qemu.is_qemu_kernel():
return None
auxv = walk_stack2(0) auxv = walk_stack2(0)
if not auxv: if not auxv:

@ -146,6 +146,8 @@ def find_upper_boundary(addr, max_pages=1024):
# import sys # import sys
# sys.stdout.write(hex(addr) + '\n') # sys.stdout.write(hex(addr) + '\n')
addr += pwndbg.memory.PAGE_SIZE addr += pwndbg.memory.PAGE_SIZE
if addr > pwndbg.arch.ptrmask:
break
except gdb.MemoryError: except gdb.MemoryError:
pass pass
return addr return addr
@ -156,6 +158,8 @@ def find_lower_boundary(addr, max_pages=1024):
for i in range(max_pages): for i in range(max_pages):
pwndbg.memory.read(addr, 1) pwndbg.memory.read(addr, 1)
addr -= pwndbg.memory.PAGE_SIZE addr -= pwndbg.memory.PAGE_SIZE
if addr < 0:
break
except gdb.MemoryError: except gdb.MemoryError:
pass pass
return addr return addr

@ -54,6 +54,10 @@ def is_qemu_usermode():
return is_qemu() and is_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.events.start
@pwndbg.memoize.reset_on_stop @pwndbg.memoize.reset_on_stop
def root(): def root():

Loading…
Cancel
Save