注目★★★★★Hacker News
x86のud2はなぜ「2」なのか?未定義命令の系譜
30秒で把握
- 1x86のud2は実行時に無効オペコード例外を必ず発生
- 20F FFと0F B9が後にud0・ud1へ命名されud2を採用
- 3ud2は2バイト・無オペランドでページ境界の例外差を回避
要約
x86のud2は、実行時に必ず無効オペコード例外を発生させる、仕様上保証された未定義命令だ。コンパイラは[[noreturn]]関数が戻るなどの到達不能コードにud2を置き、実行が続いてランダムな命令列を処理する事態を防ぐ。ud2の「2」は、旧来使われた0F FFと0F B9が後にud0、ud1と命名されたためだ。ud2は2バイトでオペランドを持たず、命令の追加デコードによるページアクセス違反を避け、例外動作が一貫する。
あなたへの影響
コンパイラ出力やクラッシュダンプを調べる日本のエンジニアは、ud2を到達不能コードや意図的な無効命令として解釈できる。
推奨:x86の例外検証ではud0・ud1ではなく、動作が保証されたud2を使うのが安全な可能性がある。