refactor the _fs_gs_helper code

pull/1036/head
disconnect3d 3 years ago
parent afbe6f0c6f
commit 71219361f5

@ -389,33 +389,27 @@ class module(ModuleType):
@property @property
@pwndbg.memoize.reset_on_stop @pwndbg.memoize.reset_on_stop
def fsbase(self): def fsbase(self):
try: return self._fs_gs_helper("fs_base", ARCH_GET_FS)
# We can try fs_base register in GDB >= 8.
assert get_register == gdb79_get_register
fs_base = get_register("fs_base")
return fs_base
except (ValueError, AssertionError):
return self._fs_gs_helper(ARCH_GET_FS)
@property @property
@pwndbg.memoize.reset_on_stop @pwndbg.memoize.reset_on_stop
def gsbase(self): def gsbase(self):
try: return self._fs_gs_helper("gs_base", ARCH_GET_GS)
# We can try gs_base register in GDB >= 8.
assert get_register == gdb79_get_register
gs_base = get_register("gs_base")
return gs_base
except (ValueError, AssertionError):
return self._fs_gs_helper(ARCH_GET_GS)
@pwndbg.memoize.reset_on_stop @pwndbg.memoize.reset_on_stop
def _fs_gs_helper(self, which): def _fs_gs_helper(self, regname, which):
"""Supports fetching based on segmented addressing, a la fs:[0x30]. """Supports fetching based on segmented addressing, a la fs:[0x30].
Requires ptrace'ing the child directly for GDB < 8."""
Requires ptrace'ing the child directly.""" # For GDB >= 8.x we can use get_register directly
# Elsewhere we have to get the register via ptrace
if get_register == gdb79_get_register:
return get_register(regname)
# We can't really do anything if the process is remote. # We can't really do anything if the process is remote.
if pwndbg.remote.is_remote(): return 0 if pwndbg.remote.is_remote():
return 0
# Use the lightweight process ID # Use the lightweight process ID
pid, lwpid, tid = gdb.selected_thread().ptid pid, lwpid, tid = gdb.selected_thread().ptid

Loading…
Cancel
Save