Это могло кодировать, повреждают мой процессор?

Друг отправил меня, что код и утверждает, что мог повредить процессор. Это верно?

void damage_processor() {
    while (true) {
        // Assembly code that sets the five control registers bits to ones which causes a bunch of exceptions in the system and then damages the processor
        Asm(
            "mov cr0, 0xffffffff \n\t"
            "mov cr1, 0xffffffff \n\t"
            "mov cr2, 0xffffffff \n\t"
            "mov cr3, 0xffffffff \n\t"
            "mov cr4, 0xffffffff \n\t"
        )
    }
}

Это верно?

12
задан John Saunders 29 April 2010 в 19:49
поделиться

6 ответов

Из кода пользовательского пространства? Нет. Это вызовет исключение привилегии, и ядро ​​завершит вашу программу. Из кода ядра? Я сомневаюсь; вы будете генерировать исключения, и вам придется вручную настроить обработчик ошибок, чтобы вернуться к рассматриваемому коду, чтобы продолжать делать это. Также существует большая вероятность того, что вы вызовете тройную ошибку, если часть перемещения CR3 завершится успешно, поскольку это контролирует адрес таблицы страниц, и вы, вероятно, получите ошибки при выборке инструкций, выборке обработчика, а затем выборке обработчика двойной ошибки. Если это произойдет, ЦП должен просто выключиться.

Обратитесь к руководствам Intel или AMD по системному программированию, они скажут вам, какие исключения будут выброшены при записи неверных битов в регистры управления.

18
ответ дан 2 December 2019 в 03:11
поделиться

Может быть, если вы дадите ему поработать около 20 лет.

15
ответ дан 2 December 2019 в 03:11
поделиться

Я слышал слух об ошибке в Pentium I, когда при задании определенной бессмысленной серии инструкций в замкнутом цикле сгорает один триггер, поэтому быстро тепловая защита не смогла его защитить.

На этот раз я нашел ссылку на действительно старые процессоры, которые можно было приготовить, сделав это в реальном режиме:

halt:
    jmp short halt

Правильный код был

halt:
    nop
    jmp short halt
1
ответ дан 2 December 2019 в 03:11
поделиться

Может быть, этот код вызывает блокировку вашего процессора / системы, но нет никаких шансов, что он повредит ее навсегда.

Представьте, если бы это было правдой: вирус немедленно использовался бы вирусами / троянами для атаки на компьютеры или сокрытия своей активности после обнаружения.

Даже в случае, если какой-либо код может повредить процессор, производитель процессора может выпустить так называемое обновление микрокода, которое является чем-то вроде программного исправления для процессора. Такие обновления микрокода предоставляются операционными системами и / или BIOS (и производителями процессоров) и загружаются в процессор до того, как такой код может быть выполнен.

Подводя итог: нет, ваш друг ошибается, если предположить, что мы говорим о платформах x86 / x64.

9
ответ дан 2 December 2019 в 03:11
поделиться

Нет. Если дело в том, чтобы лихорадочно нагружать процессор в надежде сломать его, компьютерные системы имеют тепловые решения (вентиляторы, медные теплообменники, радиаторы и т. Д.) Для предотвращения перегрева. В случае сбоя в системе охлаждения BIOS установит #THERMTRIP и выключит машину.

5
ответ дан 2 December 2019 в 03:11
поделиться

К сожалению, код не работает на процессоре ARM.

Во многих процессорах инструкции, которые устанавливают слово состояния или влияют на процессор, ограничены режимом «супервизор». Хорошие операционные системы запускают код пользователя в «защищенном» режиме, который не имеет тех же возможностей, что и режим «супервизора». Выполнение привилегированных инструкций на современных процессорах в пользовательском режиме генерирует исключения.

Вы и ваш друг всегда можете найти инструкции в справочном руководстве на языке ассемблера и проверить работу.

1
ответ дан 2 December 2019 в 03:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: