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.
Id | Nom | contient un code d'erreur ? | Descriptions |
---|---|---|---|
0 | Division par 0 | non | Cette erreur est produite quand l'instruction DIV/IDIV est utilisée avec un 0 |
1 | Debug | non | Cette erreur intentionnelle est généralement utilisée pour déboguer |
2 | Interruption NMI | non | L'interruption NMI est une interruption causée par des éléments externes comme la RAM |
3 | Breakpoint | non | Cette erreur intentionnelle est généralement utilisée pour le débogage |
4 | Dépassement | non | 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 . |
5 | Dépassement de table | non | 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 . |
6 | Instruction non valide | non | 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é |
7 | Appareil non disponible | non | L'interruption 7 est appelée lorsqu'on essaye d'initialiser le FPU alors qu'il n'existe pas |
8 | Faute Double | oui | 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) |
9 | Erreur de Segment de coprocesseur | non | Cette erreur n'est plus utilisée. |
10 | TSS invalide | oui (code d'erreur de segment) | 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 |
11 | Segment non présent | oui (code d'erreur de segment) | L'interruption "Segment non présent" est exécutée lorsqu'on essaye de charger un segment qui a son bit présent à 0 |
12 | Segment de pile invalide | oui (code d'erreur de segment) | 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 ...) |
13 | Faute générale de protection | oui (code d'erreur de segment) | 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) |
14 | Faute de page | oui (code d'erreur 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) |
15 | Réservé | non | // |
16 | Faute du FPU x87 | non | 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 |
17 | Faute d'alignement | oui | 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. |
18 | Faute de vérification de machine | non | 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. |
19 | Exception de variable a virgule SIMD | non | 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 [...] |
20 | Exception de virtualisation | non | L'exception de virtualisation est appelée lorsqu'il y a une violation de droits avec une instruction EPT |
21 à 31 | réservé | non | // |
/// | Faute triple | non | 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. |
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 |