mirror of
https://github.com/RGBCube/serenity
synced 2026-01-20 21:20:59 +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. |
||
|---|---|---|
| .. | ||
| LibAudio | ||
| LibC | ||
| LibCore | ||
| LibCrypto | ||
| LibDebug | ||
| LibDesktop | ||
| LibELF | ||
| LibGemini | ||
| LibGfx | ||
| LibGUI | ||
| LibHTTP | ||
| LibIPC | ||
| LibJS | ||
| LibLine | ||
| LibM | ||
| LibMarkdown | ||
| LibPCIDB | ||
| LibProtocol | ||
| LibPthread | ||
| LibTextCodec | ||
| LibThread | ||
| LibTLS | ||
| LibUnwind | ||
| LibVT | ||
| LibWeb | ||
| LibX86 | ||
| CMakeLists.txt | ||