Латынина, Лариса Семёновна
- 1 year ago
- 0
- 0
F0 0F C7 C8 — последовательность байтов , формирующих недействительную машинную команду процессоров семейства x86 . В процессорах Pentium MMX и Pentium OverDrive , вследствие аппаратной недоработки, команда, будучи выполненной на любом уровне привилегий, приводила к мёртвому зависанию процессора, что отрицательно сказывалось на надёжности системы в целом.
Инструкция представляет собой команду:
lock cmpxchg8b eax
Операндом может быть любой другой регистр помимо eax. cmpxchg8b используется для сравнения содержимого пары регистров eax и edx с 8 байтами содержимого некоторого участка памяти. При этом происходит попытка поместить 8-байтовый результат в 4-байтный регистр.
Сама по себе эта команда просто вызывает исключение , однако при сочетании с префиксом lock (он используется для предотвращения обращения двух процессоров к одному и тому же участку памяти одновременно) обработчик исключений не вызывается, процессор перестает обрабатывать прерывания и для приведения его в рабочее состояние требуется перезагрузка.
Для выполнения этой инструкции не требуется наличия особых привилегий , и, ввиду высокого уровня распространенности процессоров Intel , проблема была серьёзной. Хотя она не наносила никакого непоправимого урона аппаратному обеспечению, но могла также быть причиной потери данных в тех случаях, когда сбой процессора возникал во время выполнения операции записи на диск при неочищенном буфере, выполнении прерывания или другой неатомарной операции.