El SIGILL es la señal enviada a los programas de computadora que intentan ejecutar las instrucciones malformadas, desconocidas, o privilegiadas en el POSIX - plataformas obedientes. El constante simbólico para SIGILL se define en el archivo de jefe de el SIG del es un prefijo común para los nombres de la señal; El ENFERMO es una abreviatura para la instrucción ilegal del . Hay muchas razones posibles de recibir un SIGILL. Un error común implica accidentalmente el que sobreescribe los datos del apilado con un remite que señale a los datos no significados para ser ejecutado o que intenta ejecutar un indicador de la función que no se inicialice correctamente. Otros problemas pudieron implicar insectos del recopilador ( Toolchain ), la corrupción del sistema de ficheros o intentar ejecutar las instrucciones que requieren los privilegios especiales . Muchas plataformas ejecutan las nuevas instrucciones o proporcionan los registros adicionales en revisiones subsecuentes del hardware, así que los usos compilados para un hardware más reciente pueden generar las instrucciones ilegales del cuando están funcionados en un hardware más viejo que no reconozca el nuevo Opcodes . Un ejemplo pudo intentar utilizar instrucciones MMX en un procesador de Intel 80486, que no apoyó la característica. SIGILL se puede también generar por los usuarios con los permisos apropiados, usar la llamada de sistema de la matanza SIGILL puede ser dirigido. Es decir, los programadores pueden especificar la acción que quisieran ocurrir sobre la recepción de un SIGILL, por ejemplo ejecutar una subrutina, no hacer caso del acontecimiento, o restaurar el comportamiento del defecto. Observar que bajo ciertas circunstancias, el intentar no hacer caso de SIGILL puede dar lugar al comportamiento indefinido . El acoplamiento a veces malo de la llamada también causará SIGILL. Aquí está un ejemplo de un programa del ANSI C que intente ejecutar una instrucción ilegal en las plataformas donde no está un opcode 0xFFFFFFFF válido. cañería de la internacional () { insn sin firmar del carbón de leña = {0xff, 0xff, 0xff, 0xff}; anular (*function) () = (el vacío (*) ()) insn; función (); } La compilación y el funcionamiento de él en el IA-32 con el linux produce el siguiente: GCC de $ - sigill sigill./sigill Instrucción ilegal (base descargada) En procesadores más recientes y versiones del linux, el programa antedicho puede no recibir un SIGILL debido a la característica del pedacito NX, que permite que el núcleo del linux haga las páginas de la memoria en el apilado del programa non-executable por abandono. En esos casos, el programa recibirá la señal SIGSEGV . Un Backtrace Gdb demuestra que el programa se estrelló dentro de la función de El programa recibió la señal SIGILL, instrucción ilegal. ¿0xbfffede4 adentro?? () (gdb) BT ¿#0 0xbfffede4 adentro?? () #1 0x0804837f en cañería () exhibición /i $eip (del gdb) 1: x/i $eip 0xbfffede4: (malo) Observar el " " (del malo);, indicando que la depuración no reconoce el opcode en esa dirección. La mnemónica que representa la instrucción sería exhibida normalmente allí. Comparar la salida de SIGILL con la de una avería de la segmentación y de una señal SIGFPE . ignals .
signal. Se utilizan los nombres simbólicos de la señal porque los números de la señal pueden variar a través de las plataformas. del Etimología
Descripción
. Ejemplo
main cuando el programa intentó ejecutar una instrucción en la dirección 0xBFFFEDE4: Ver también
señal (computación)
Insecto del Pentium F0
Sistema de instrucción
Anillo 0 Random links: Fafhrd y el perro ratonero gris | WebDAV | Innovación y sus descontentos | Darci Kistler | Upton, Lincolnshire