|
|
|
@ -9,6 +9,7 @@ import string
|
|
|
|
|
|
|
|
|
|
|
|
import gdb
|
|
|
|
import gdb
|
|
|
|
import pwndbg.events
|
|
|
|
import pwndbg.events
|
|
|
|
|
|
|
|
import pwndbg.memory
|
|
|
|
import pwndbg.typeinfo
|
|
|
|
import pwndbg.typeinfo
|
|
|
|
|
|
|
|
|
|
|
|
length = 15
|
|
|
|
length = 15
|
|
|
|
@ -32,20 +33,14 @@ def get(address, maxlen = None):
|
|
|
|
maxlen = length
|
|
|
|
maxlen = length
|
|
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
sz = gdb.Value(address)
|
|
|
|
sz = pwndbg.memory.string(address)
|
|
|
|
sz = sz.cast(pwndbg.typeinfo.pchar)
|
|
|
|
sz = sz.decode('latin-1', 'replace')
|
|
|
|
sz = sz.string('ascii', 'replace', maxlen)
|
|
|
|
|
|
|
|
sz = pwndbg.memory.read(address, len(sz))
|
|
|
|
|
|
|
|
sz = sz.rstrip('\x00')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if not sz or not all(s in string.printable for s in sz):
|
|
|
|
if not sz or not all(s in string.printable for s in sz):
|
|
|
|
return None
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
sz = str(sz)
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
except Exception as e:
|
|
|
|
return None
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if len(sz) < maxlen:
|
|
|
|
if len(sz) < maxlen:
|
|
|
|
return sz
|
|
|
|
return sz
|
|
|
|
|
|
|
|
|
|
|
|
|