soft-ice отлавливает
Если нажать "x" (или <Ctrl-D>), то немедленно после выхода из soft-ice вспыхнет синий экран и тогда чинить будет уже нечего. Но пока мы в находимся в soft-ice еще можно кое-что предпринять. А предпринять можно следующее:
q определить место сбоя (в нашем случае это обращение по нулевому указателю), исправить ситуацию (установить валидный указатель), вручную выйти из обработчика исключения, вернув CS:EIP на прежнее место: способ хороший, но увы — не универсальный и требующий определенного интеллекта, которого у машины нет;
q зациклить текущий поток к ядреной фене, воткнув в свободное место jmp $ и выйти из отладчика, разрешив прерывания командной r fl=I (если они вдруг были запрещены) — все будет ужасно тормозить, но ось продолжит работать и мы по крайней мере сможем корректно завершить ее работу;
q дождаться вызова функции KeBugCheckEx и сразу же выйти из нее, проигнорировав сбой и продолжив нормальное выполнение, правда, никаких гарантий, что система не рухнет окончательно, у нас нет;
q способ предложенный ms-rem — дикий, но иногда работающий: отдать команды r eip=0/r cs=1B, переключающие процессор на прикладной режим;
Короче, вариантов много. Можно сказать, толпа. В глазах рябит и разбегается, вызывая оживленное подергивание где-то в области хвоста. Ладно, попробуем для начала воспользоваться первым способом. Мы знаем, что в данном случае, авария произошла из-за ошибки нарушения доступа (в другом случае мы этого знать не будем). Следовательно, процессор возбудил исключение, забросил на вершину стека EIP/CS/FLAGS и передал управление обработчику исключений внутри которого мы сейчас и находится (примечание: иногда по не совсем понятной причине, soft-ice останавливается не на первой команде обработчика исключений, а на непосредственно на месте самого сбоя. Под VM Ware первый раз soft-ice 2.6 всегда останавливается в обработчике, а все последующие разы — на месте сбоя. Эффект сохраняется вплоть до перезапуска VM Ware).
Даем команду "d esp" для отображения содержимого стека и видим (примечание: для удобства рекомендуется переключить окно дампа в режим двойных слов, воспользовавшись командой "dd"):
:d esp
0010:F7443C88 BE67C000 00000008 00200202 804A4431 ..g....... .1DJ.
0010:F7443C98 81116AD0 8649D000 BE8F1D08 BE8F1D08 .j....I.........
0010:F7443CA8 81480020 F7443D34 745FFFFF 83A49E60 .H.4=D..._t`...