2010-04-29 4 views
12

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

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

Это правда?

+6

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

+16

Нет, это не так, но это заставит ваш монитор взорваться. – kahoon

+8

Ну, вы попробовали? – Christoffer

ответ

17

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

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

+2

Тройные ошибки обычно вызывают перезагрузку. –

+0

В обоих случаях должен выполняться выборщик обработчиков двойной ошибки, с «безопасным» значением CR3 для загрузки ЦП с безопасными стеками и значениями регистра. Разбивание CR3 «не должно» тройной ошибки системы (теоретически), но это все еще не очень хорошая идея. –

14

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

9

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

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

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

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

5

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

1

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

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

halt: 
    jmp short halt 

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

halt: 
    nop 
    jmp short halt 
+4

Не могли бы вы также указать ссылку на нас? – Kosi2801

+2

Я искренне сомневаюсь в этом. AFAIK Pentium 1 не имел тепловой защиты. Кроме того, любой радиатор, одобренный Intel, был бы более чем достаточным, чтобы поддерживать базовую температуру в проверке даже при максимальной потребляемой мощности. http://www.intel.com/design/pentium/datashts/24199710.pdf –

1

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

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

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

+1

этот код был для Pentium 4 btw – Radian

0

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

Смежные вопросы