def save_signal(signal): global last_signal last_signal = result = [] if isinstance(signal, gdb.ExitedEvent): # Booooo old gdb if hasattr(signal, 'exit_code'): result.append(message.exit('Exited: %r' % signal.exit_code)) elif isinstance(signal, gdb.SignalEvent): msg = 'Program received signal %s' % signal.stop_signal if signal.stop_signal == 'SIGSEGV': # When users use rr (https://rr-project.org or https://github.com/mozilla/rr) # we can't access $_siginfo, so lets just show current pc # see also issue 476 if _is_rr_present(): msg += ' (current pc: %#x)' % pwndbg.regs.pc else: try: si_addr = gdb.parse_and_eval("$_siginfo._sifields._sigfault.si_addr") msg += ' (fault address %#x)' % int(si_addr or 0) except gdb.error: pass result.append(message.signal(msg)) elif isinstance(signal, gdb.BreakpointEvent): for bkpt in signal.breakpoints: result.append(message.breakpoint('Breakpoint %s' % (bkpt.location)))
def save_signal(signal): global last_signal last_signal = result = [] if isinstance(signal, gdb.ExitedEvent): # Booooo old gdb if hasattr(signal, 'exit_code'): result.append(message.exit('Exited: %r' % signal.exit_code)) elif isinstance(signal, gdb.SignalEvent): msg = 'Program received signal %s' % signal.stop_signal if signal.stop_signal == 'SIGSEGV': # When users use rr (https://rr-project.org or https://github.com/mozilla/rr) # we can't access $_siginfo, so lets just show current pc # see also issue 476 if _is_rr_present(): msg += ' (current pc: %#x)' % pwndbg.regs.pc else: try: si_addr = gdb.parse_and_eval( "$_siginfo._sifields._sigfault.si_addr") msg += ' (fault address %#x)' % int(si_addr or 0) except gdb.error: pass result.append(message.signal(msg)) elif isinstance(signal, gdb.BreakpointEvent): for bkpt in signal.breakpoints: result.append(message.breakpoint('Breakpoint %s' % (bkpt.location)))
def save_signal(signal): global last_signal last_signal = result = [] if isinstance(signal, gdb.ExitedEvent): # Booooo old gdb if hasattr(signal, 'exit_code'): result.append(message.exit('Exited: %r' % signal.exit_code)) elif isinstance(signal, gdb.SignalEvent): msg = 'Program received signal %s' % signal.stop_signal if signal.stop_signal == 'SIGSEGV': try: si_addr = gdb.parse_and_eval("$_siginfo._sifields._sigfault.si_addr") msg += ' (fault address %#x)' % int(si_addr or 0) except gdb.error: pass result.append(message.signal(msg)) elif isinstance(signal, gdb.BreakpointEvent): for bkpt in signal.breakpoints: result.append(message.breakpoint('Breakpoint %s' % (bkpt.location)))