Repository navigation
Rewind64 v0.2.4 (Linux x86-64 experimental)
Pre-releaseRewind64 v0.2.4 — experimental Linux x86-64 prerelease
Explore execution. Trace every instruction. Understand the past.
This release adds explicitly addressed, read-only single-word memory inspection to Rewind64's Assembly interactive debugger. It is experimental and limited to a single process launched by the debugger, running on Linux x86-64.
New: mem 0xHEX / m 0xHEX
From a stopped interactive session, specify a hexadecimal address:
rewind64> mem 0x402000
Memory word at 0x0000000000402000: 0x1122334455667788
rewind64> m 0x402008
Memory word at 0x0000000000402008: 0xffffffffffffffff
The command reads one 64-bit (eight-byte) machine word using Linux PTRACE_PEEKDATA. It does not write or modify process memory, registers or instruction state. It can be used at the initial program stop, after a recognized instruction step, or while a delivery signal is pending. There is no process attachment or unrestricted memory dump.
Input validation and error handling
- Addresses must begin with
0xor0X, followed by 1–16 hexadecimal digits. Uppercase and lowercase digitsA–Fwork. - Rejects missing digits, negative signs, excess digits, embedded/trailing whitespace and nonhexadecimal characters, including otherwise valid prefixes followed by junk. This is an exact NASM parser, without unbounded numeric conversion.
- A syntactically valid but unreadable address produces
ptrace(PEEKDATA at address)and returns to the command prompt with the target still stopped. Memory reads do not forward pending signals. - Before each read the debugger sets libc
errnoto zero. A ptrace return of-1is accepted as valid all-ones data iferrnois still zero; otherwise it is an error. - The old
code/xcommand still reads the word at RIP;stack/kstill reads up to four words starting at RSP. These commands are complementary.
Python-free native regression tests
Bash integration scripts resolve live symbol addresses from the stack_words and illegal native Assembly ELF fixtures using nm, rather than assuming fixed memory addresses. They verify known data, valid all-ones reads, zero and noncanonical/unreadable addresses, malformed hex, compact output, successive reads, coexistence with code and stack inspection, and signal-pending inspection without reinjection. The project continues to use NASM Assembly for the executable debugger and all test target fixtures, with Make/Bash test orchestration.
Usage
./rewind64 run --interactive /path/to/your/authorized/program
./rewind64 run --interactive --changes-only /path/to/your/authorized/programAt the prompt enter mem 0xADDRESS. All pre-existing commands—step, regs, status, code, stack, continue, help, quit and their aliases—remain available.
Limitations
Only Linux x86-64 with ptrace permissions and glibc is supported. A read can fail if an address is not mapped or accessible. The machine word is displayed as hexadecimal and is not disassembled, typed, decoded or persisted. Memory values may contain sensitive data; avoid sharing raw trace output. This debugger is not a sandbox; inspect only programs you own or are authorized to debug.
No Windows/macOS binary, thread/fork following, process attach, write-memory operation, breakpoint management, source/symbol debugger, reverse stepping, trace recording or deterministic replay is implemented.
License: Boost Software License 1.0. Source: https://github.com/sanskarIN/Rewind64