From b02dad2fe0500830cd309ad0c0379456835dbc0e Mon Sep 17 00:00:00 2001 From: Disconnect3d Date: Thu, 9 May 2019 07:35:29 +0200 Subject: [PATCH] Fixes #636 - bug with regs display on other frames (#637) TLDR: 1. We read registers from `newest_frame` instead of `selected_frame` for GDB>=7.9. 2. We have two ways to fetch registers - `regs.__getitem__` and `regs.__getattr__` - one of them didn't invalidate cache and so after fixing 1st, we still shown the old register after switching frames. --- pwndbg/regs.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pwndbg/regs.py b/pwndbg/regs.py index 209f57570..a84ae4edd 100644 --- a/pwndbg/regs.py +++ b/pwndbg/regs.py @@ -249,7 +249,7 @@ def gdb77_get_register(name): @pwndbg.proc.OnlyWhenRunning def gdb79_get_register(name): - return gdb.newest_frame().read_register(name) + return gdb.selected_frame().read_register(name) try: gdb.Frame.read_register @@ -285,6 +285,7 @@ class module(ModuleType): return None @pwndbg.memoize.reset_on_stop + @pwndbg.memoize.reset_on_prompt def __getitem__(self, item): if isinstance(item, six.integer_types): return arch_to_regs[pwndbg.arch.current][item]