Raymond Chen, chroniqueur de longue date chez Microsoft, retrace sur le blog The Old New Thing l'histoire de l'instruction x86 ud2. Ud2 est un opcode architecturalement invalide qui déclenche toujours une exception d'opcode invalide. Les compilateurs l'insèrent après du code censé être inaccessible, par exemple après l'appel d'une fonction marquée [[noreturn]] qui reviendrait malgré tout.
Avant l'apparition de ud2, les développeurs cherchaient un moyen fiable de provoquer cette exception. Un groupe utilisait la séquence d'octets 0F FF, un autre la séquence 0F B9 ; les deux étaient décodées en interne comme si elles prenaient un registre de destination et une source registre ou mémoire, jamais réellement utilisés. Lorsqu'Intel a modifié des processeurs ultérieurs et que ces deux séquences ont cessé de déclencher l'exception de façon fiable, des logiciels existants se sont mis à planter, un exemple classique de la loi de Hyrum : avec suffisamment d'utilisateurs, tout comportement observable finit par être exploité par quelqu'un.
La solution d'Intel a été de normaliser une véritable instruction définitivement invalide, ud2, un opcode de deux octets sans opérande. Rétrospectivement, 0F FF a été renommé ud0 et 0F B9 est devenu ud1, laissant ud2 comme choix officiel recommandé.
Chen signale un inconvénient technique de ud0 et ud1 : comme leurs octets d'opérandes inutilisés sont malgré tout décodés, tomber sur l'une de ces séquences en fin de page mémoire peut déclencher une violation d'accès plutôt qu'une exception d'opcode invalide si la page suivante n'est pas présente. Certains anciens processeurs déclenchaient l'exception dès le décodage de 0F FF sans terminer le décodage complet, ce qui produisait un comportement incohérent selon les limites de page. Ud2 évite ce problème car il est autonome et son comportement est garanti par l'architecture.




Commentaires
Pas encore de commentaire — écris le premier.
Lance la discussion
Pas de compte ni de mot de passe — saisis simplement ton adresse e-mail et nous t’envoyons un lien de connexion à usage unique. Première visite ? Tout se met en place automatiquement.
Ton évaluation sera appliquée automatiquement après ta connexion.
Vérifie ta boîte mail
Nous avons envoyé un lien de connexion à …. Ouvre-le sur cet appareil — cet onglet te connectera automatiquement.
Rien reçu ? Vérifiez le dossier spam — et marquez le message « Non spam » pour qu'il arrive directement la prochaine fois.