From fb462c308367529ca2ca96942771ca2de179a713 Mon Sep 17 00:00:00 2001 From: Zach Riggle Date: Thu, 8 Dec 2016 16:19:25 -0500 Subject: [PATCH 1/2] Add gdb.lookup_symbol to pwndbg.symbol.address --- pwndbg/inthook.py | 5 +++++ pwndbg/symbol.py | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/pwndbg/inthook.py b/pwndbg/inthook.py index 47352840c..1cee81c26 100644 --- a/pwndbg/inthook.py +++ b/pwndbg/inthook.py @@ -36,6 +36,11 @@ class xint(builtins.int): value = value.cast(pwndbg.typeinfo.ulong) else: value = value.cast(pwndbg.typeinfo.long) + if isinstance(value, gdb.Symbol): + symbol = value + value = symbol.value() + if symbol.is_function: + value = value.cast(pwndbg.typeinfo.ulong) return _int(_int(value, *a, **kw)) builtins.int = xint diff --git a/pwndbg/symbol.py b/pwndbg/symbol.py index a024de78e..beca99a19 100644 --- a/pwndbg/symbol.py +++ b/pwndbg/symbol.py @@ -201,6 +201,13 @@ def address(symbol): except: pass + try: + symbol_obj = gdb.lookup_symbol(symbol)[0] + if symbol_obj: + return int(symbol_obj) + except Exception: + pass + try: result = gdb.execute('info address %s' % symbol, to_string=True, from_tty=False) address = re.search('0x[0-9a-fA-F]+', result).group() From e2dcbcfd35a7a82f93ecf4375b82d4644e325d19 Mon Sep 17 00:00:00 2001 From: Zach Riggle Date: Thu, 8 Dec 2016 16:24:07 -0500 Subject: [PATCH 2/2] Use IDA LocByName to retrieve symbol addresses --- pwndbg/symbol.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pwndbg/symbol.py b/pwndbg/symbol.py index beca99a19..af1cde98c 100644 --- a/pwndbg/symbol.py +++ b/pwndbg/symbol.py @@ -215,6 +215,13 @@ def address(symbol): except gdb.error: return None + try: + address = pwndbg.ida.LocByName(symbol) + if address: + return address + except Exception: + pass + @pwndbg.events.stop @pwndbg.memoize.reset_on_start def add_main_exe_to_symbols():