cmake -B build
cmake --build build
build/ToyDebugger build/TestProgram
run
break 55555555511d # figure this out using /proc/pid/maps and objdump -d
continue
regs
step
regs
continue
quit
- handle dynamic terminal resize
- show disassembly in a window
- support non-wrapping text overflow for windows
- implement text wrapping utility for wrapping text in a window
- poc render text in boxes
- write command history to a scrollback buffer
- re-integrate with command system
- draw borders around windows for debugging purposes
- migrate codebase from C to C++
- parse line into tokens
- command line interface
- breakpoint states: inactive/active (not user-controlled), enabled/disabled (user-controlled)
- enabled+active means the tracee will stop when the breakpoint is reached
- enabled+inactive means the tracee has hit the breakpoint and is currently stopped, and can hit the breakpoint again
- disabled+(anything) means the tracee will not stop when the breakpoint is reached
- as soon as tracee hits a breakpoint, we make the breakpoint inactive (temporarily) and rewind the instruction pointer
- to continue, we single step, make the breakpoint active, put the int3 instruction back in if needed, then continue
- link zydis
- implement ncurses ui
- Snapshot and restore a Linux process
- Time-travel debugging (i.e. reverse stepping)
- https://iafisher.com/blog/2024/08/linux-process-tricks
- https://github.com/checkpoint-restore/criu
- https://medium.com/@lizrice/a-debugger-from-scratch-part-1-7f55417bc85f
- https://tartanllama.xyz/posts/writing-a-linux-debugger/
- https://rfc.archlinux.page/0026-fno-omit-frame-pointer/
- https://thume.ca/2020/04/18/telefork-forking-a-process-onto-a-different-computer/