From c2681a4190f1166bce2d2a4380b74d1bea9f8258 Mon Sep 17 00:00:00 2001 From: Zach Riggle Date: Thu, 9 Apr 2015 21:21:27 -0400 Subject: [PATCH] Handle unions --- pwndbg/dt.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pwndbg/dt.py b/pwndbg/dt.py index ad315eca4..5157dbb58 100644 --- a/pwndbg/dt.py +++ b/pwndbg/dt.py @@ -82,7 +82,7 @@ def dt(name='', addr=None, obj = None): t = pwndbg.typeinfo.load(name) # If it's not a struct (e.g. int or char*), bail - if t.code not in (gdb.TYPE_CODE_STRUCT, gdb.TYPE_CODE_TYPEDEF): + if t.code not in (gdb.TYPE_CODE_STRUCT, gdb.TYPE_CODE_TYPEDEF, gdb.TYPE_CODE_UNION): raise Exception("Not a structure: %s" % t) # If an address was specified, create a Value of the @@ -97,7 +97,7 @@ def dt(name='', addr=None, obj = None): if t.strip_typedefs().code == gdb.TYPE_CODE_ARRAY: return "Arrays not supported yet" - if t.strip_typedefs().code != gdb.TYPE_CODE_STRUCT: + if t.strip_typedefs().code not in (gdb.TYPE_CODE_STRUCT, gdb.TYPE_CODE_UNION): t = {name: obj or gdb.Value(0).cast(t)} for name, field in t.items(): @@ -106,7 +106,7 @@ def dt(name='', addr=None, obj = None): extra = str(field.type) ftype = field.type.strip_typedefs() - if obj and obj.type.strip_typedefs().code == gdb.TYPE_CODE_STRUCT: + if obj and obj.type.strip_typedefs().code in (gdb.TYPE_CODE_STRUCT, gdb.TYPE_CODE_UNION): v = obj[name] if ftype.code == gdb.TYPE_CODE_INT: