На компьютерном жаргоне killer poke — это метод нанесения физического ущерба оборудованию машины или ее периферийным устройствам путем вставки недопустимых значений, например, с помощью команды BASIC POKE , в отображаемый в памяти регистр управления . Этот термин обычно используется для описания семейства довольно известных трюков, которые могут перегрузить аналоговую электронику в ЭЛТ- мониторах компьютеров, не имеющих проверки работоспособности оборудования (яркими примерами являются IBM Portable [1] и Commodore PET ).
Компьютеры Z1 (1938) и Z3 (1941), созданные Конрадом Цузе, содержали недопустимые последовательности инструкций, которые при случайном выполнении приводили к повреждению оборудования. [2]
PET - специфический killer poke связан с архитектурой схем видеорастеризатора этой машины. В ранних PET запись определенного значения в адрес памяти определенного регистра ввода-вывода ( POKE 59458,62
[3] ) позволяла машине отображать текст и графику на экране на 106% быстрее. Это достигалось путем отключения защиты «ожидания печати на экране», разработанной для уменьшения статики/шума путем предотвращения чтения общей VRAM дисплеем в то же время, когда она записывалась ЦП. При отключении этой защиты графика могла появляться на экране в два раза быстрее, но также появлялись небольшие фрагменты статики. Несмотря на статику, некоторые игры, разработанные для ранних PET, включали этот POKE в свой исходный код, чтобы извлечь выгоду из более быстрой графики. [1]
Когда линейка PET была обновлена с помощью обновленного оборудования, схемы видеорастеризатора были перепроектированы для работы на более высокой скорости и без необходимости в защите «ожидания печати». Таким образом, старый трюк POKE больше не приводил к более быстрой графике. Вместо этого выполнение старого трюка на новом оборудовании приводило к странному поведению нового видеочипа, что могло вызвать конфликт сигналов и, возможно, повредить встроенный в PET ЭЛТ- монитор. [4] Это связано с тем, что точный вывод, на который нацелена команда POKE, использовался для управления синхронизацией отображения, но в обновленном видеочипе этот вывод управлял вертикальной синхронизацией. Таким образом, запуск POKE на новом оборудовании вызывал сжатие графики по вертикали, иногда до чрезвычайно яркой горизонтальной линии. Опасения, что эта аномалия может выжечь дисплей, привели к прозвищу «убийственный тычок»; [3] однако, неизвестно, чтобы он когда-либо наносил какой-либо постоянный ущерб монитору. [5]
Commodore 64 имел дополнительный внешний дисковод 5-1/4". Commodore 1541 содержал микропроцессор 6502, который использовался для работы Commodore DOS , а также для управления механизмом привода. Дисководы хранили данные на 35 дорожках (#0–34), а шаговый двигатель можно было вручную контролировать через BASIC, отправляя на дисковод команды PRINT# "MEMORY-WRITE" (которые соответствуют команде POKE BASIC, но записывают во внутреннюю память и регистры ввода-вывода диска, а не в регистры самого компьютера). Если дисковод находился на любом из концов своего диапазона (дорожка 0 или дорожка 39) и ему приказывали продолжать движение, не было программного или встроенного метода предотвращения повреждения диска. Продолжительный "удар" головки диска по упору приводил к сбою выравнивания механизма. Проблема усугублялась методами защиты от копирования , которые использовали нестандартные форматы дисков с необычным количеством дорожек. Commodore 1571 имел оптическую головку остановки вместо механической.
Оригинальные TRS-80 и TRS-80 Model III имели возможность переключения между 32-символьным и 64-символьным дисплеями. Это приводило в действие реле в видеооборудовании, что достигалось путем записи в определенный регистр управления, отображенный в памяти. [6] Программы, которые многократно переключались между 32- и 64-символьным режимами на высокой скорости (намеренно или случайно), могли навсегда повредить видеооборудование. [ необходима цитата ] Хотя это не единичный «убийственный тычок», он демонстрирует режим сбоя программного обеспечения , который может навсегда повредить оборудование.
Модель TRS-80 I также имеет аналогичное реле двигателя кассеты, доступ к которому осуществляется с помощью команды из памяти, что может привести к повреждению реле.
Некоторые модели CD-ROM-приводов LG с определенной прошивкой использовали нестандартную команду для «обновления прошивки»: команду «очистить буфер», обычно используемую на CD-RW-приводах. Linux использует эту команду для различения CD-ROM и CD-RW-приводов. Большинство CD-ROM-приводов стабильно возвращают ошибку для неподдерживаемой команды CD-RW, но неисправные приводы интерпретируют ее как «обновить прошивку», из-за чего они перестают работать (или, говоря простым языком, «забиваются » ). [7]
Ресурс флэш-памяти большой, но ограниченный. Поскольку запись в хранилище является важной операцией, большинство приложений имеют достаточно привилегий, чтобы исчерпать ресурс флэш-чипов в течение 24 часов, заполняя хранилище достаточно, чтобы вызвать усиление записи и постоянную перезапись небольшого файла. [8]
Systemd монтирует переменные, используемые Unified Extensible Firmware Interface в sysfs системы Linux, как доступные для записи пользователю root системы. В результате пользователь root системы может полностью вывести из строя систему с несоответствующей реализацией UEFI (в частности, некоторые ноутбуки MSi ), используя команду для удаления каталога или рекурсивно удалив корневой каталог . [9] [ требуется лучший источник ]rm
/sys/firmware/efi/efivars/
Есть много деталей, которые инженер, проектирующий «микропрограмму», должен иметь в виду, иначе короткие замыкания могут разрушить оборудование.
Z1
с его механической конструкцией был все еще более чувствителен в этом отношении, чем
Z3
. Даже после того, как он был завершен, были последовательности инструкций, которых программист должен был избегать, чтобы не повредить оборудование. Одна из таких последовательностей была непреднамеренно опробована в
Берлинском музее техники и транспорта
, что привело к небольшому повреждению реконструированного Z1 в 1994 году.(12 страниц)