Debugging¶
While the driving concept behind revenge
is dynamic binary
instrumentation, you can still do some traditional debugging activities.
Breakpoints¶
Breakpoints in revenge
are not the normal int3
or even hardware
breakpoints. Instead, revenge
re-writes the address in question with a
small loop that effectively stops it there, while not actually suspending the
thread. This allows for setup to be completed or other activites to be run, and
DBI to proceed part way through the binary.
Examples¶
# Set a breakpoint at main
process.memory['a.out:main'].breakpoint = True
# Continue execution from main, later
process.memory['a.out:main'].breakpoint = False
# Check if any given point in memory has a breakpoint
process.memory['a.out:main'].breakpoint