SEH

eXeL@B DVD

Материал из Справочник исследователя программ

Перейти к: навигация, поиск
Постоянно слышу термин SEH. Что это такое, и как это мешает отладке?

SEH - это сокращение от Structured Exception Handling, т.е. структурированная обработка исключительных ситуаций. Примерами исключительных ситуаций (далее - ИС) могут быть деление на ноль, попытка доступа к невыделенной области памяти, попытка записи в системную область памяти, недопустимые арифметические операции (например попытка вычисления логарифма от нуля) и т.д. Обработчик операционной системы (далее - ОС) получает управление при возникновении ИС и решает что дальше делать, после чего либо завершает программу, либо выполняет необходимые действия и передает управление обратно программе. Программа может сама указать свой обработчик ИС, однако этот обработчик будет получать управление уже из обработчика исключительной ситуации ОС. Как это мешает отладке? Программа, которая хочет помешать своей отладке устанавливает свой собственный обработчик ИС, после чего создает исключительную ситуацию. Если мы будем проходить по участку кода, где будет создаваться исключительная ситуация, то в этот момент попадем в обработчик ИС операционной системы. Переход на обработчик ИС, который был установлен из программы, произойдет в одном из call'ов внутри обработчика ИС ОС =) А если мы будем идти в отладчике, нажимая F10 (т.е. не входя в вызовы процедур и функций), то проскочим переход в обработчик, установленный программой, и возврат в программу, т.е. так сказать потеряемся =) В этом и трудность. Как с этим бороться читайте например в статьях Hex'a (www.xtin.org).

Источник — «https://exelab.ru/faq/SEH»