Подтвердить что ты не робот

Может ли этот код повредить мой процессор?

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

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"
        )
    }
}

Это правда?

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

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

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

halt:
    jmp short halt

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

halt:
    nop
    jmp short halt

Ответ 6

Извините, код не работает на процессоре ARM.

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

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

Ответ 7

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