Raymond Chen, langjähriger Microsoft-Blogger, rekonstruiert im Blog The Old New Thing die Geschichte des x86-Befehls ud2. Ud2 ist ein architektonisch garantiert ungültiger Opcode, der immer eine Invalid-Opcode-Exception auslöst. Compiler setzen ihn hinter Code, der eigentlich unerreichbar sein soll, etwa nach dem Aufruf einer mit [[noreturn]] markierten Funktion, falls diese wider Erwarten zurückkehrt.
Bevor es ud2 gab, suchten Entwickler nach verlässlichen Wegen, diese Exception zu erzwingen. Eine Gruppe nutzte die Bytefolge 0F FF, eine andere 0F B9; beide wurden intern so dekodiert, als hätten sie ein Zielregister und eine Register- oder Speicherquelle, die aber nie ausgewertet wurden. Als Intel spätere Prozessoren änderte und diese beiden Sequenzen nicht mehr zuverlässig die Exception auslösten, brach vorhandene Software, ein klassisches Beispiel für Hyrums Gesetz: Bei genügend Nutzern wird jedes beobachtbare Verhalten irgendwann zur Abhängigkeit.
Intels Lösung war, mit ud2 einen echten, dauerhaft ungültigen Befehl zu standardisieren, einen zwei Byte langen Opcode ohne Operanden. Rückwirkend wurde 0F FF in ud0 umbenannt und 0F B9 in ud1, sodass ud2 als offizielle, empfohlene Variante übrig blieb.
Chen weist auf einen technischen Nachteil von ud0 und ud1 hin: Da ihre ungenutzten Operanden-Bytes trotzdem dekodiert werden, kann ein Zugriff am Ende einer Speicherseite eine Zugriffsverletzung statt einer Invalid-Opcode-Exception auslösen, wenn die nächste Seite nicht vorhanden ist. Manche ältere Prozessoren lösten die Exception bei 0F FF sofort aus, ohne die Dekodierung abzuschließen, was je nach Seitengrenze zu uneinheitlichem Verhalten führte. Ud2 umgeht dieses Problem, weil es vollständig in sich abgeschlossen ist und sein Verhalten architektonisch garantiert ist.




Kommentare
Noch keine Kommentare — schreib den ersten.
Starte die Diskussion
Kein Konto, kein Passwort nötig — gib einfach deine E-Mail-Adresse ein, wir senden dir einen einmaligen Anmelde-Link. Beim ersten Mal bist du damit automatisch angemeldet.
Deine Bewertung wird nach der Anmeldung automatisch übernommen.
Schau in dein Postfach
Wir haben einen Anmelde-Link an … gesendet. Öffne ihn auf diesem Gerät — dieser Tab meldet dich automatisch an.
Nichts angekommen? Wirf einen Blick in den Spam-Ordner — und markiere die Mail dort als „Kein Spam“, dann landet sie künftig direkt im Postfach.