Asayomu Tech
注目★★★★★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を使うのが安全な可能性がある。

詳細を読む → 元記事へ※ 本文は元記事をご確認ください (asayomu は要約のみ提供)

関連する記事

※ 外部記事の権利は原著作者に帰属します。著作権削除要請は copyright@asayomu.jp までご連絡ください(受領確認 24h・実処理 72h 以内)。