From 7ec861b1106a64886d761808d3fecdbe1d90d4c8 Mon Sep 17 00:00:00 2001 From: Disconnect3d Date: Mon, 17 Apr 2017 20:17:34 +0200 Subject: [PATCH] Added alernate typeinfo lookup names for D lang (#213) (#214) * Added alernate typeinfo lookup names for D lang (#213) Names fetched from: https://dlang.org/ctod.html#types * Remove unused import from typeinfo.py: six --- pwndbg/typeinfo.py | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/pwndbg/typeinfo.py b/pwndbg/typeinfo.py index e90a8aa2c..2cd48cf9f 100644 --- a/pwndbg/typeinfo.py +++ b/pwndbg/typeinfo.py @@ -16,7 +16,6 @@ import sys import tempfile import gdb -import six import pwndbg.events import pwndbg.gcc @@ -24,6 +23,7 @@ import pwndbg.memoize module = sys.modules[__name__] + def is_pointer(value): type = value @@ -33,25 +33,36 @@ def is_pointer(value): type = type.strip_typedefs() return type.code == gdb.TYPE_CODE_PTR + +def lookup_types(*types): + for type_str in types: + try: + return gdb.lookup_type(type_str) + except Exception as e: + exc = e + raise exc + + @pwndbg.events.start @pwndbg.events.stop def update(): + module.char = gdb.lookup_type('char') - module.ulong = gdb.lookup_type('unsigned long') - module.long = gdb.lookup_type('long') - module.uchar = gdb.lookup_type('unsigned char') - module.ushort = gdb.lookup_type('unsigned short') - module.uint = gdb.lookup_type('unsigned int') + module.ulong = lookup_types('unsigned long', 'uint') + module.long = lookup_types('long', 'int') + module.uchar = lookup_types('unsigned char', 'ubyte') + module.ushort = lookup_types('unsigned short', 'ushort') + module.uint = lookup_types('unsigned int', 'uint') module.void = gdb.lookup_type('void') - module.uint8 = gdb.lookup_type('unsigned char') - module.uint16 = gdb.lookup_type('unsigned short') - module.uint32 = gdb.lookup_type('unsigned int') - module.uint64 = gdb.lookup_type('unsigned long long') + module.uint8 = module.uchar + module.uint16 = module.ushort + module.uint32 = module.uint + module.uint64 = lookup_types('unsigned long long', 'ulong') module.int8 = gdb.lookup_type('char') module.int16 = gdb.lookup_type('short') module.int32 = gdb.lookup_type('int') - module.int64 = gdb.lookup_type('long long') + module.int64 = lookup_types('long long', 'long') module.ssize_t = module.long module.size_t = module.ulong