stringtranslate.com

Недопустимый код операции

Сгенерированный человеком незаконный командный сигнал

Незаконный код операции , также называемый невыполненной операцией , [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 Operation»), используемой Windows NTVDM . [3]

Несмотря на гарантию Intel против таких инструкций, исследования с использованием таких методов, как фаззинг, выявили огромное количество недокументированных инструкций в процессорах x86 еще в 2018 году. [4] Некоторые из этих инструкций являются общими для производителей процессоров, что указывает на то, что Intel и AMD знают об инструкции и ее назначении, несмотря на то, что она не фигурирует ни в одной официальной спецификации. Другие инструкции специфичны для производителей или определенных линеек продуктов. Назначение большинства недокументированных инструкций x86 неизвестно.

Сегодня детали этих инструкций представляют интерес в основном для точной эмуляции старых систем.

Смотрите также

Ссылки

  1. ^ "1.2. Формат инструкций". Справочное руководство по PDP-10: Программирование с набором инструкций PDP-10 (PDF) . Том 1. Digital Equipment Corporation (DEC). 1969. стр. 1-7 . Получено 13.05.2022 .
  2. ^ Окессон, Линус (2013-03-31). "GCR decoding on the fly". Архивировано из оригинала 2017-03-21 . Получено 2017-03-21 .
  3. ^ Шульман, Эндрю; Браун, Ральф Д .; Макси, Дэвид; Михельс, Рэймонд Дж.; Кайл, Джим (1994) [ноябрь 1993]. Недокументированная DOS: руководство программиста по зарезервированным функциям и структурам данных MS-DOS — расширено для включения MS-DOS 6, Novell DOS и Windows 3.1 (2-е изд.). Reading, Массачусетс: Addison Wesley . ISBN 0-201-63287-X.(xviii+856+vi страниц, 3,5-дюймовая дискета) Опечатки: [1][2]
  4. ^ Домас, Кристофер (2017-08-31). "Breaking the x86 Instruction Set". YouTube . Архивировано из оригинала 2021-12-19 . Получено 2018-01-03 .

Дальнейшее чтение

Внешние ссылки