Короче, проблема была при открытии контекста во время отлова события. А именно, присвоение поля contextflags:
ctx.ContextFlags = CONTEXT_ALL;
Когда так делаешь, происходит краш игры, если присваивать только на получение из контекста только отладочных и целочисленных регистров, вылет игры не происходит. Как думаете, почему так? Я присвоил так:
ctx.ContextFlags = CONTEXT_DEBUG_REGISTERS | CONTEXT_INTEGER
И все заработало. То есть ошибка была именно там. Видимо это надо разбираться в механизме получения контекста во время отладочного события.
Я нашёл очень интересную книгу про это, если кому нибудь надо будет, я поделюсь:
Книга
Там хорошо расписано про флаги контекста, как нужно делать.
ЗЫ это не реклама, просто если у кого будет такая же проблема, прочитайте фрагмент книги по ссылке.