Ваше наиболее вероятное и, вероятно, самое безопасное "решение" - это снимок состояния процесса, к которому можно безопасно вернуться, используя setjmp
/ longjmp
(или CONTEXT
), который хранится где-то уникальным дляпроцесс, но неприкасаемый, такой как FS
/ GS
/ ES
сегменты, аналогично тому, как хранится PEB.Это позволяет корректно восстанавливать все регистры, не оставляя слишком много возможных дыр.
Конечно, это может привести к ошибкам в чем-то похожем на игру (зависит от того, где именно произошел взрыв), но на что-то вроде текстового процессора илиприложение, в котором незначительная потеря состояния не является серьезной проблемой, оно должно работать нормально (это напоминает мне о старой среде разработки Dev-C ++, которая использовалась для сбоя любого другого файла, но каким-то образом продолжала работать, хотя и заверяла меня в ''фатальное исключение, от которого невозможно было оправиться ...).