mirror of
https://github.com/RGBCube/serenity
synced 2026-01-13 16:51:06 +00:00
After hitting a breakpoint, we single step the program to execute the instruction we breaked on and re-enable the breakpoint. We also single step the program when the user of LibDebug returned a DebugDecision::SingleStep. Previously, if we hit a breakpoint and then were asked to to a DebugDecision::SingleStep, we would single step twice. This bug can actually crash programs, because it might cause us to skip over a patched INT3 instruction in the second single-step. Interestingely enough, this bug manifested as functrace crashing certain programs: after hitting a breakpoint on a CALL instruction, functrace single steps the program to see where the CALL jumps to (yes, this can be optimized :D). functrace crashed when a CALL instruction jumps to another CALL, because it inserts breakpoints on CALL instructions, and so the INT3 in the 2nd CALL was skipped over, and we executed garbage :). This commit fixes this by making sure not to single-step twice. |
||
|---|---|---|
| .. | ||
| Dwarf | ||
| CMakeLists.txt | ||
| DebugInfo.cpp | ||
| DebugInfo.h | ||
| DebugSession.cpp | ||
| DebugSession.h | ||