SIGILL

Le SIGILL est le signal envoyé aux programmes informatiques qui essayent d'exécuter les instructions mal formées, inconnues, ou privilégiées sur le POSIX - plates-formes conformes. La constante symbolique pour SIGILL est définie dans le dossier d'en-tête de de signal. Des noms symboliques de signal sont employés parce que les nombres de signal peuvent varier à travers des plates-formes.

Étymologie

Le SIG est un préfixe commun pour des noms de signal ; Le MALADE est une abréviation pour l'instruction illégale de .

Description

Il y a beaucoup de raisons possibles de recevoir un SIGILL. Une erreur commune implique accidentellement le recouvrant les données de pile d'une adresse de retour qui indique les données non censées pour être exécutée ou essayante d'exécuter un indicateur de fonction de qui n'est pas correctement initialisé. D'autres problèmes pourraient comporter des bogues du compilateur ( Toolchain ) de , la corruption du système de fichiers ou essayer d'exécuter les instructions qui exigent les privilèges spéciaux .

Beaucoup de plates-formes mettent en application les nouvelles instructions ou fournissent les registres additionnels sur des révisions suivantes de matériel, ainsi les applications compilées pour un matériel plus récent peuvent produire des instructions illégales de une fois courues sur un matériel plus ancien qui n'identifie pas le nouveau Opcodes . Un exemple pourrait essayer d'employer des instructions du MMX sur un processeur d'Intel 80486 , qui n'a pas soutenu le dispositif.

SIGILL peut également être produit par des utilisateurs avec les permissions appropriées, using l'appel système de de la mise à mort de de .

SIGILL peut être manipulé. C'est-à-dire, les programmeurs peuvent spécifier l'action qu'ils voudraient se produire lors de recevoir un SIGILL, comme exécuter une sous-routine , ignorer l'événement, ou reconstituer le comportement de défaut.

Noter que dans certaines circonstances, essayer d'ignorer SIGILL peut avoir comme conséquence le comportement éliminé par .

La tringlerie parfois mauvaise d'appel causera également SIGILL.

Exemple

Voici un exemple d'un programme de la norme ANSI C qui essaye d'exécuter une instruction illégale sur des plates-formes où 0xFFFFFFFF n'est pas un opcode valide.

force d'international () { insn non signé de char = {0xff, 0xff, 0xff, 0xff} ; vider (*function) () = (le vide (*) ()) insn ; fonction () ; }

La compilation et le fonctionnement de lui sur le IA-32 avec le Linux produit ce qui suit :

GCC de $ - sigill sigill./sigill Instruction illégale (image mémoire vidée)

Sur des processeurs plus récents et des versions de Linux, le programme ci-dessus peut ne pas recevoir un SIGILL en raison du dispositif du peu du NX, qui permet au grain de Linux de rendre les pages de mémoire sur la pile de programme non-executable par défaut. Sur ces cas, le programme recevra le signal du SIGSEGV .

Un Backtrace Gdb prouve que le programme s'est brisé dans la fonction de main quand le programme a essayé d'exécuter une instruction à l'adresse 0xBFFFEDE4 :

Le programme a reçu le signal SIGILL, instruction illégale. 0xbfffede4 dedans ? ? () (gdb) le BT #0 0xbfffede4 dedans ? ? () #1 0x0804837f dans la force () affichage /i $eip (de gdb) 1 : x/i $eip 0xbfffede4 : (le mauvais)

Noter le " ; " (du mauvais) ; , indiquant que le programme de mise au point n'identifie pas l'opcode à cette adresse. La mnémonique représentant l'instruction normalement serait montrée là.

Comparer le rendement de SIGILL à celui d'un défaut de segmentation de et d'un signal du SIGFPE .

Voir également


signal (calcul)
Bogue du Pentium F0 de
Ensemble d'instruction
Anneau 0

ignals

.

Random links:Dr. Ambedkar Law University de Tamil Nadu | Acte d'élections de temps de guerre | Liste de rois irlandais | Hommes sans chapeaux : Les plus grands chapeaux | Patrick Michael Hayes | SIGILL