Speed up and limit the return size of pwndbg.memory.string

Closes #163
pull/164/head
Zach Riggle 9 years ago
parent e0eb7857b6
commit faaaee7efd

@ -14,7 +14,6 @@ import pwndbg.vmmap
@pwndbg.commands.Command
@pwndbg.commands.OnlyWhenRunning
def dt(typename, address=None):
"""
Dump out information on a type (e.g. ucontext_t).

@ -75,15 +75,23 @@ def poke(address):
except: return False
return True
def string(addr):
data = bytearray()
while peek(addr):
byte = read(addr, 1)
if byte == b'\x00':
break
data += byte
addr += 1
return data
def string(addr, max=4096):
"""Reads a null-terminated string from memory.
Arguments:
addr(int): Address to read from
max(int): Maximum string length (default 4096)
Returns:
An empty bytearray, or a NULL-terminated bytearray.
"""
if peek(addr):
data = bytearray(read(addr, max, partial=True))
if b'\x00' in data:
return data.split(b'\x00')[0]
return bytearray()
def byte(addr): return readtype(pwndbg.typeinfo.uchar, addr)
def uchar(addr): return readtype(pwndbg.typeinfo.uchar, addr)

@ -41,7 +41,7 @@ def get(address, maxlen = None):
maxlen = length
try:
sz = pwndbg.memory.string(address)
sz = pwndbg.memory.string(address, maxlen)
sz = sz.decode('latin-1', 'replace')
if not sz or not all(s in string.printable for s in sz):

Loading…
Cancel
Save