HeadlinesBriefing favicon HeadlinesBriefing.com

Почему неопределенная инструкция x86 называется ud2?

Hacker News •
×

Инструкция ud2 — это архитектурно неопределенный опкод в x86, который надежно генерирует исключение "недопустимый опкод". Компиляторы используют её для пометки "недостижимого" кода, гарантируя сбой, если выполнение доходит до неё. Изначально официальной неопределенной инструкции не существовало, поэтому программисты полагались на байтовые последовательности вроде 0F FF или 0F B9 для вызова исключения. Эти последовательности внутренне декодировались как инструкции с двумя неиспользуемыми параметрами. Когда Intel внесла изменения, нарушившие 0F FF, программное обеспечение, зависевшее от неё, перестало работать, что иллюстрирует закон Хайрума. Для обеспечения стабильного решения Intel официально создала ud2, ретроспективно назвав старые варианты ud0 и ud1. В отличие от предшественников, ud2 — это чистая двухбайтовая инструкция без параметров, избегающая проблем декодирования, которые могли вызывать нарушения доступа вместо исключений недопустимого опкода. Это делает ud2 последовательным и рекомендуемым выбором для намеренного вызова сбоя.

Наименование отражает историю: 0F FF стало ud0, 0F B9 стало ud1, а новая официальная инструкция получила название ud2. Ключевое преимущество ud2 — её архитектурная гарантия, обеспечивающая предсказуемое поведение независимо от наличия страницы памяти или деталей реализации процессора.