Aller au contenu

Codes d'erreur d'interruption

Toutes les interruptions entre 0 et 32 sont des interruptions d'erreur.

Certains codes d'erreur peuvent être corrigés après le retour de l'interruption. Cependant, d'autres ne peuvent pas l'être.

Code de l'interruption Nom Descriptions Contient un code d'erreur ?
0 Division par 0 Cette erreur est produite quand l'instruction DIV/IDIV est utilisée avec un 0 non
1 Debug Cette erreur intentionnelle est généralement utilisée pour déboguer non
2 Interruption NMI L'interruption NMI est une interruption causée par des éléments externes comme la RAM non
3 Breakpoint Cette erreur intentionnelle est généralement utilisée pour le débogage non
4 Dépassement L'interruption 4 est causée lorsque l'instruction INTO est éxécuté alors que le bit 11 de RFLAGS est mis à 1.
Note : l'erreur n'est pas possible en 64 bits car l'instruction INTO n'est pas disponible en mode long.
non
5 Dépassement de table L'interruption 5 est causée lorsque l'instruction BOUND est exécutée quand opérateur 1 n'est pas dans la taille de table définie dans l'opérateur 2.
Note : l'erreur n'est pas possible en 64 bits car l'instruction BOUND n'est pas disponible en mode long.
non
6 Instruction non valide L'interruption 6 est causée lorsque :
- On essaye d'accéder à un registre non existant
- On essaye d'exécuter une instruction non disponible
- UD est exécuté
non
7 Appareil non disponible L'interruption 7 est appelée lorsqu'on essaye d'initialiser le FPU alors qu'il n'existe pas non
8 Faute Double La faute double est appelée lorsqu'il y a une erreur pendant que l'interruption d'erreur est appelée (une erreur dans une erreur) oui
9 Erreur de Segment de coprocesseur Cette erreur n'est plus utilisée. non
10 TSS invalide L'interruption TSS invalide est exécutée lorsque le sélecteur de segment pour la TSS est invalide.
Causée pendant un changement de tâche ou pendant l'accès de la TSS
oui (code d'erreur de segment)
11 Segment non présent L'interruption "Segment non présent" est exécutée lorsqu'on essaye de charger un segment qui a son bit présent à 0 oui (code d'erreur de segment)
12 Segment de pile invalide L'interruption "Segment de pile" invalide est causée lorsque :
- On charge un segment de pile qui n'est pas présent
- La vérification de la limite de pile n'est pas possible
- (64bit) On essaye de faire une opération qui fait une référence à la mémoire en utilisant le pointeur de pile (RSP) qui contient une adresse mémoire non canonique
- Le segment de pile n'est pas présent pendant une opération qui fait référence au registre SS, (comme pop, push, iret ...)
oui (code d'erreur de segment)
13 Faute générale de protection L'interruption n°13 peut être causée par beaucoup de raisons, comme :
- L'écriture d'un 1 dans une zone du registre CR4 réservée
- L'utilisation une instruction SSE qui essaye d'accéder une zone de la mémoire 128 bits qui n'est pas alignée en 16bit
- Une pile de mémoire non alignée en 16bit [...].

Voir le manuel Intel pour plus d'informations (chap 3 6.15.13)
oui (code d'erreur de segments)
14 Faute de page L'interruption n°14 peut être causée lorsque :
- Il y a une erreur en relation avec le paging
- On essaye d'accéder à une zone de la mémoire qui n'a pas de table présente
- On essaye de charger une table et que la zone ou on éxécute le code n'est pas exécutable dans la page
- Un problème d'autorisation est causé (ex: écrire dans une zone de la mémoire qui ne peut pas être écrite) [...]

Voir le manuel Intel pour plus d'informations (chap 3 6.15.14)
oui (code d'erreur de page)
15 Réservé // non
16 Faute du FPU x87 L'interruption n°16 est causée lorsqu'il y a une erreur pendant une instruction du FPU, une opération invalide, une division par 0, un dépassement numérique, un résultat non exact, ou lorsque le bit 5 du registre CR0 = 1 non
17 Faute d'alignement Produite lorsque le bit 18 de CR0 et RFLAGS sont égaux à 1. L'erreur est causée lorsqu'une référence de mémoire est non alignée. oui
18 Faute de vérification de machine Produite lorsque le bit 6 du CR4 est égal à 1. L'erreur est causée lorsque le CPU détecte une erreur de machine, comme un problème de bus, cache, mémoire, ou une erreur interne. non
19 Exception de variable a virgule SIMD L'interruption n°19 est appelé lorsqu'il y a une erreur avec les nombres à virgule pendant une opération SSE : division par 0, dépassement numérique, résultat non exact [...] non
20 Exception de virtualisation L'exception de virtualisation est appelée lorsqu'il y a une violation de droits avec une instruction EPT non
21 à 31 réservé // non
/// Faute triple L'exception faute triple est exécutée lorsqu'il y a une erreur pendant l'interruption de faute double (une erreur dans une erreur dans une erreur). L'interruption faute triple cause un redémarrage de la machine. non

Codes d'erreur d'une faute de page

BIT NOM DESCRIPTION
0 P (p=1)
Violation de protection

(p=0)
la page n'est pas présente
1 W (W=0)
Causée par une lecture

(W=1)
Causée par une écriture
2 U (U=1)
La page n'est pas utilisateur alors que CPL = 3
3 R (R=1)
La page contient un bit réservé
4 I (I=1)
Lecture à cause d'une instruction
5 PK (PK=1)
Violation de droit de clé
6 SS (SS=1)
Accès à "l'ombre de la pile"
7-31 // Réservé

Lors d'une faute de page, l'addresse qui a causé l'exception est stockée dans CR2.

Codes d'erreur d'une faute générale de protection

BIT NOM TAILLE DESCRIPTION
0 E 1 (E=1)
Provient d'un appareil externe au processeur
1 TBL 2 (TBL=0)
Provient de la GDT

(TBL=1)
Provient de l'IDT

(TBL=2 & TBL=3)
Provient de la LDT
3 Index 13 Index de la table sélectionnée dans TBL