HeadlinesBriefing favicon HeadlinesBriefing.com

x86の未定義命令がud2と呼ばれる理由

Hacker News •
×

ud2 命令は x86 におけるアーキテクチャレベルで未定義のオプコードであり、確実に「無効なオプコード」例外を発生させます。コンパイラはこれを「到達不能」コードのマークとして使用し、実行がそこへ到達した場合にクラッシュすることを保証します。当初は公式の未定義命令が存在しなかったため、プログラマーは 0F FF0F B9 などのバイト列に頼って例外を発生させていました。これらの列は内部的に、未使用の2つのパラメータを持つ命令としてデコードされていました。Intel0F FF を破壊する変更を導入したとき、それに依存していたソフトウェアは失敗し、ハイラムの法則を示すことになりました。安定した解決策を提供するため、Intel は公式に ud2 を作成し、古いバリアントを遡って ud0ud1 と命名しました。前身とは異なり、ud2 はパラメータを持たないクリーンな2バイト命令であり、無効なオプコード例外の代わりにアクセス違反を引き起こす可能性のあるデコード問題を回避します。これにより、ud2 は意図的なクラッシュを引き起こすための一貫した推奨選択肢となっています。

命名はこの歴史を反映しています:0F FFud0 に、0F B9ud1 に、そして新しい公式命令は ud2 と名付けられました。ud2 の主な利点はそのアーキテクチャ保証であり、メモリページの有無やプロセッサの実装詳細に関わらず予測可能な動作を保証します。