Недопустимый код операции
В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Машинный код |
---|
Общие понятия |
Инструкции |
Недопустимый код операции , также называемый нереализованной операцией . [1] непреднамеренный код операции [2] или недокументированная инструкция — это инструкция для ЦП , которая не упоминается ни в одной официальной документации, выпущенной разработчиком или производителем ЦП, но, тем не менее, имеет эффект. Незаконные коды операций были распространены на старых процессорах, разработанных в 1970-х годах, таких как MOS Technology 6502 , Intel 8086 и Zilog Z80 . В этих старых процессорах многие из них возникают как побочный эффект подключения транзисторов в ЦП и обычно объединяют функции ЦП, объединение которых не предполагалось. На старых и современных процессорах также имеются инструкции, намеренно включенные в процессор производителем, но не задокументированные ни в одной официальной спецификации.
Эффект множества недопустимых кодов операций на многих процессорах — это просто ловушка для обработчика ошибок. Однако некоторые процессоры, которые перехватывают большинство недопустимых кодов операций, не делают этого для некоторых недопустимых кодов операций, а некоторые другие процессоры не проверяют наличие недопустимых кодов операций и вместо этого выполняют недокументированную операцию.
Обзор
[ редактировать ]Хотя большинство случайных незаконных инструкций имеют бесполезные или даже крайне нежелательные последствия (например, сбой в работе компьютера), некоторые из них могут иметь полезные функции в определенных ситуациях. Такие инструкции иногда использовались в компьютерных играх 1970-х и 1980-х годов для ускорения определенных критичных по времени участков. Другое распространенное применение — продолжающаяся битва между реализациями защиты от копирования и взломом . Здесь они были формой безопасности благодаря неизвестности , и их секретность обычно длилась недолго.
Опасность, связанная с использованием незаконных инструкций, заключалась в том, что, учитывая тот факт, что производитель не гарантирует их существование и функционирование, они могут исчезнуть или вести себя по-другому при любом изменении внутреннего устройства ЦП или любой новой версии ЦП, создавая программы, которые используйте их, несовместимые с более новыми версиями. Например, ряд старых игр Apple II не работали корректно на более новом Apple IIc , поскольку последний использовал более новую версию процессора — 65C02 — которая устранила недопустимые коды операций.
Более поздние процессоры, такие как 80186 , 80286 , 68000 и их потомки, не имеют недопустимых кодов операций, которые широко известны/используются. В идеале ЦП будет вести себя четко определенным образом, когда обнаружит неизвестный код операции в потоке команд, например, вызовет определенное исключение или состояние ошибки . Обработчик исключений или сбоев операционной системы обычно завершает приложение, вызвавшее сбой, если только программа ранее не установила свой собственный обработчик исключений/ошибок, и в этом случае этот обработчик получит управление. процессора Другой, менее распространенный способ обработки недопустимых инструкций — определить, что они ничего не делают, кроме как занимают время и пространство (эквивалент официальной инструкции NOP ); этот метод используется , среди прочего, процессорами TMS9900 и 65C02 . Альтернативно, неизвестные инструкции могут быть эмулированы в программном обеспечении (например, LOADALL ) или даже могут быть реализованы «новые» псевдоинструкции. Некоторые BIOS , менеджеры памяти и операционные системы используют это преимущество, например, чтобы позволить задачам V86 взаимодействовать с базовой системой, т. е. BOP (из «Операции BIOS»), используемым Windows. НТВДМ . [3]
Несмотря на гарантию Intel против таких инструкций, исследования с использованием таких методов, как фаззинг, еще в 2018 году выявили огромное количество недокументированных инструкций в процессорах x86. [4] Некоторые из этих инструкций используются производителями процессоров, что указывает на то, что Intel и AMD знают об этой инструкции и ее назначении, несмотря на то, что она не фигурирует ни в одной официальной спецификации. Другие инструкции относятся к конкретным производителям или конкретным линейкам продуктов. Назначение большинства недокументированных инструкций x86 неизвестно.
Сегодня детали этих инструкций представляют интерес главным образом для точной эмуляции старых систем.
См. также
[ редактировать ]- Бэкдор (вычисления)
- Неважный термин
- Пасхальное яйцо (СМИ)
- Гаджет (последовательность машинных инструкций)
- Остановись и загорись (вычисления)
- Микрокод
- Ошибка Пентиума F00F
- Синтетическое программирование
- Ловушка (компьютерная)
- Недокументированная функция
Ссылки
[ редактировать ]- ^ «1.2. Формат инструкции». Справочное руководство PDP-10: Программирование с использованием набора инструкций PDP-10 (PDF) . Том. 1. Корпорация цифрового оборудования (DEC). 1969. с. 1-7 . Проверено 13 мая 2022 г.
- ^ Окессон, Линус (31 марта 2013 г.). «Декодирование GCR на лету» . Архивировано из оригинала 21 марта 2017 г. Проверено 21 марта 2017 г.
- ^ Шульман, Эндрю; Браун, Ральф Д .; Макси, Дэвид; Михелс, Раймонд Дж.; Кайл, Джим (1994) [ноябрь 1993 г.]. Недокументированная DOS: Руководство программиста по зарезервированным функциям и структурам данных MS-DOS - расширено и включает MS-DOS 6, Novell DOS и Windows 3.1 (2-е изд.). Ридинг, Массачусетс: Эддисон Уэсли . ISBN 0-201-63287-Х . (xviii+856+vi страниц, 3,5-дюймовая дискета) Исправления: [1] [2]
- ^ Домас, Кристофер. «Нарушение набора инструкций x86» . Ютуб . Архивировано из оригинала 19 декабря 2021 г. Проверено 3 января 2018 г.
Дальнейшее чтение
[ редактировать ]- Варди, Адам (27 сентября 1996 г.) [22 августа 1995 г.]. «Дополнительные инструкции для ЦП серии 65XX» . Архивировано из оригинала 28 августа 2021 г. Проверено 18 ноября 2021 г. (Примечание. Недопустимые коды операций на 6502.)
- Стейл, Майкл (29 июля 2008 г.). «Как на самом деле работают незаконные коды операций MOS 6502» . pagetable.com — Требуется некоторая сборка . Архивировано из оригинала 19 ноября 2021 г. Проверено 18 ноября 2021 г.
- Янг, Шон (18 сентября 2005 г.) [1997]. «Документация Z80: недокументированная документация Z80» . 0,91. Архивировано из оригинала 09 октября 2021 г. Проверено 18 ноября 2021 г. (Примечание. Недопустимые коды операций на Z80.)
- Браун, Ральф Д. , изд. (29 декабря 2002 г.) [17 июля 2000 г., 1985]. «Список прерываний x86» (61-е изд.). Архивировано из оригинала 22 августа 2017 г. Проверено 14 октября 2011 г. [3] [4] [5] [6] [7] [8] [9] (Примечание. Список прерываний Ральфа Брауна также содержит некоторую информацию о недокументированных кодах операций процессора и ошибках процессора: OPCODES.LST Алекса В. Потемкина и 86BUGS.LST Харальда Фельдмана.)