Skip to content

Rewind64 v0.2.12 (Linux x86-64 experimental)

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 20 Oct 07:54
71f28db

Rewind64 v0.2.12 — experimental Linux x86-64 prerelease

Explore execution. Trace every instruction. Understand the past.

This experimental update introduces a continue-to-next-signal interactive command and verifies a real series of handled signal-delivery stops. The debugger remains a forward-only, single self-launched Linux x86-64 target debugger.

New: until-signal / u

At an interactive prompt:

rewind64> until-signal
Interactive signal stop: signal 10 pending; choose step, until-signal, continue or quit.
rewind64> signals
Signal history [0]: signal=10 si_code=0 step=0
rewind64> u
Interactive signal stop: signal 10 pending; choose step, until-signal, continue or quit.
rewind64> signals
Signal history [0]: signal=10 si_code=0 step=0
Signal history [1]: signal=10 si_code=0 step=0

The example uses a target with a real SIGUSR1 handler; actual signal codes and counts depend on the program. until-signal performs PTRACE_CONT and returns to the command prompt at the next validated application signal-delivery stop, with that new signal not yet forwarded.

  • At a pending signal stop: another u, step or continue forwards the pending signal exactly once on a successful ptrace resume.
  • At a new validated signal stop: the session records the stop in the bounded eight-entry signals ring and returns to the interactive prompt. signals and events remain read-only.
  • If the tracee exits first: the target's actual status is returned; no synthetic signal stop is invented.
  • Across exec events: ordinary ptrace exec events are followed and don't count as application signal stops.
  • Existing ordinary continue behavior is unchanged: it runs onward and automatically forwards signals.
  • The exact commands until-signal / u are accepted even if the final input line has no newline. Extra arguments are rejected.

Repeated handled-signal verification

A new native NASM Linux x86-64 fixture sends itself ten SIGUSR1 signals sequentially and verifies that a real installed handler ran ten times before exiting successfully. With repeated u requests, the debugger must:

  • Stop at each of the ten signal-delivery events, retaining at most the latest eight records in chronological order.
  • Distinguish 10 observed vs 9 forwarded signal events while paused at the tenth stop, then report 10 forwarded after the final resume.
  • Leave the stopped target unchanged during signals, events, history and status inspections.

The full Python-free Bash/native NASM suite has 204 integration tests, exercised on Ubuntu 22.04 and Ubuntu 24.04. The prerelease publishing workflow reruns make clean && make test before packaging the native executable archive and SHA256SUMS.txt.

Usage

./rewind64 run --interactive /path/to/your/authorized/program
./rewind64 run --interactive --changes-only /path/to/your/authorized/program

Interactive commands include step [1..16]/s, until-signal/u, history [1..16]/h, events/e, signals/g, regs/r, status/i, code/x, bytes [1..8]/b, stack/k, mem 0xHEX [1..4]/m, continue/c, help, and quit/q.

Scope and safety

Debug only programs you own or have permission to inspect. Linux ptrace restrictions apply; Rewind64 is not a security sandbox and can reveal sensitive process state. No multi-thread/process following, Windows/macOS backend, attach, breakpoints, disassembly, persistent execution traces, historic memory/register restoration, deterministic replay or reverse stepping is implemented. This is an experimental pre-release, not stable.

License: Boost Software License 1.0. Repository: https://github.com/sanskarIN/Rewind64