Вопрос

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

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

Это правда?

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

Суммируйте это: нет, ваш друг не прав, предполагая, что мы говорим о платформах X86 / X64.

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

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

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

halt:
    jmp short halt

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

halt:
    nop
    jmp short halt

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top