SIGILL
В 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, в некоторых случаях, может привести к непредсказуемым результатам.