diff --git a/pwndbg/inthook.py b/pwndbg/inthook.py index 923d7c100..3bc43b222 100644 --- a/pwndbg/inthook.py +++ b/pwndbg/inthook.py @@ -18,18 +18,20 @@ from future.utils import with_metaclass import pwndbg.typeinfo -if sys.version_info < (3,0): +if sys.version_info < (3, 0): import __builtin__ as builtins else: import builtins _int = builtins.int + # We need this class to get isinstance(7, xint) to return True class IsAnInt(type): def __instancecheck__(self, other): return isinstance(other, _int) + class xint(with_metaclass(IsAnInt, builtins.int)): def __new__(cls, value, *a, **kw): if isinstance(value, gdb.Value): @@ -37,11 +39,16 @@ class xint(with_metaclass(IsAnInt, builtins.int)): value = value.cast(pwndbg.typeinfo.ulong) else: value = value.cast(pwndbg.typeinfo.long) - if isinstance(value, gdb.Symbol): + + elif isinstance(value, gdb.Symbol): symbol = value - value = symbol.value() + value = symbol.value() if symbol.is_function: value = value.cast(pwndbg.typeinfo.ulong) + + else: + return _int.__new__(cls, value, *a, **kw) + return _int(_int(value, *a, **kw)) # Do not hook 'int' if we are just generating documentation @@ -49,6 +56,6 @@ if os.environ.get('SPHINX', None) is None: builtins.int = xint globals()['int'] = xint - if sys.version_info >= (3,0): + if sys.version_info >= (3, 0): builtins.long = xint globals()['long'] = xint