В POSIX-системах, SIGILL — сигнал, посылаемый процессу при попытке выполнить неправильно сформированную, несуществующую или привилегированную инструкцию.

SIGILL
Описание Недопустимая инструкция
По умолчанию завершение с дампом памяти
Коды SA_SIGINFO
ILL_ILLOPC недопустимый код операции
ILL_ILLOPN недопустимый операнд
ILL_ADR недопустимая адресация
ILL_ILLTRP недопустимая ловушка
ILL_PRVOPC привилегированная операция
ILL_PRVREG привилегированный регистр
ILL_COPROC ошибка сопроцессора
ILL_BADSTK ошибка стека

SIGILL — целочисленная константа, определенная в заголовочном файле signal.h. Символьные имена сигналов используются вместо номеров, так как в разных реализациях номера сигналов могут различаться.

Этимология

править

SIG — общий префикс сигналов (от англ. signal), ILL — сокращенное написание англ. illegal instruction — недопустимая инструкция.

Использование

править

Существует много причин для SIGILL. Одна из наиболее частых причин — передача управления в случайное место памяти — в результате передачи управления через неинициализированный или повреждённый указатель (или адрес возврата в стеке). Другие случаи возможны при ошибках компилятора, повреждении файловой системы или попытке выполнения инструкции, требующей специальных привилегий.

На многих платформах, по мере развития оборудования внедряются новые инструкции, регистры и т. п. и приложения, собранные для современного оборудования могут содержать инструкции, не распознающиеся на более старом оборудовании. Например, SIGILL возникнет при попытке выполнить инструкции MMX на процессоре i486, который их не поддерживает.

SIGILL может быть перехвачен или проигнорирован. Однако игнорирование SIGILL, в некоторых случаях, может привести к непредсказуемым результатам.