SIGILL

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

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

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

Этимология[править | править код]

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

Использование[править | править код]

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

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

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