From c2fd5126d908a56f053945e10151b66937630caa Mon Sep 17 00:00:00 2001 From: Zach Riggle Date: Tue, 12 Apr 2016 16:45:21 -0500 Subject: [PATCH] Add reinit_pwndbg command which is useful after a fork/exec under gdbserver to clear internal state. --- pwndbg/commands/reload.py | 9 +++++++++ pwndbg/memoize.py | 20 ++++++++++++++------ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/pwndbg/commands/reload.py b/pwndbg/commands/reload.py index 52415976f..5aa19fbc4 100644 --- a/pwndbg/commands/reload.py +++ b/pwndbg/commands/reload.py @@ -11,6 +11,7 @@ import gdb import pwndbg import pwndbg.commands import pwndbg.events +import pwndbg.memoize def rreload(module, mdict=None): @@ -37,3 +38,11 @@ def reload(*a): pwndbg.events.on_reload() rreload(pwndbg) pwndbg.events.after_reload() + +@pwndbg.commands.Command +def reinit_pwndbg(): + """ + Makes pwndbg reinitialize all state. + """ + pwndbg.memoize.reset() + pwndbg.events.after_reload() diff --git a/pwndbg/memoize.py b/pwndbg/memoize.py index 6ed2cc1ba..bf3434266 100644 --- a/pwndbg/memoize.py +++ b/pwndbg/memoize.py @@ -75,7 +75,7 @@ class reset_on_stop(memoize): for obj in reset_on_stop.caches: obj.cache.clear() - __reset = __reset_on_stop + _reset = __reset_on_stop class reset_on_exit(memoize): caches = [] @@ -87,7 +87,7 @@ class reset_on_exit(memoize): for obj in reset_on_exit.caches: obj.clear() - __reset = __reset_on_exit + _reset = __reset_on_exit class reset_on_objfile(memoize): caches = [] @@ -99,7 +99,7 @@ class reset_on_objfile(memoize): for obj in reset_on_objfile.caches: obj.clear() - __reset = __reset_on_objfile + _reset = __reset_on_objfile class reset_on_start(memoize): caches = [] @@ -112,7 +112,7 @@ class reset_on_start(memoize): for obj in reset_on_start.caches: obj.clear() - __reset = __reset_on_start + _reset = __reset_on_start class reset_on_cont(memoize): caches = [] @@ -124,7 +124,7 @@ class reset_on_cont(memoize): for obj in reset_on_cont.caches: obj.clear() - __reset = __reset_on_cont + _reset = __reset_on_cont class while_running(memoize): caches = [] @@ -143,5 +143,13 @@ class while_running(memoize): obj.clear() while_running.caching = False - __reset = __reset_while_running + _reset = __reset_while_running + +def reset(): + reset_on_stop._reset(); + reset_on_exit._reset(); + reset_on_objfile._reset(); + reset_on_start._reset(); + reset_on_cont._reset(); + while_running._reset();