这段代码会损坏我的处理器吗?

一位朋友发给我该密码并声称它可能会损坏处理器。 真的吗?

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

真的吗?

从用户空间代码? 不会。它会导致特权exception,内核将终止您的程序。 从内核代码? 我对此表示怀疑; 您将抛出exception,并且您必须手动设置故障处理程序以返回有问题的代码以继续执行此操作。 如果CR3的一部分移动成功,那么你也有可能导致三重错误,因为它控制了页表地址,你可能会在指令获取,处理程序获取,然后是双故障处理程序获取时遇到错误。 如果发生这种情况,CPU应该关闭。

查看系统编程的Intel或AMD手册,它们会告诉您在向控制寄存器写入无效位时会抛出哪些exception。

也许如果你让它运行大约20年。

也许此代码会导致您的处理器/系统锁定,但不会永久损坏它。

想象一下,如果这是真的:病毒/特洛伊木马会立即使用它来攻击计算机或在检测后隐藏其活动。

即使在任何代码都可能损坏处理器的情况下,处理器制造商也可以发出所谓的微代码更新,这类似于处理器的软修复。 这种微代码更新由操作系统和/或BIOS(和处理器制造商)提供,并在执行这些代码之前加载到处理器中。

总结一下:不,你的朋友错了,假设我们正在谈论x86 / x64平台。

没有。如果关键是要对处理器进行狂热的操作,希望打破处理器,计算机系统会有散热解决方案(风扇,铜质热交换器,散热器等),以防止过热。 如果散热解决方案出现故障,BIOS将断言#THERMTRIP并关闭机器。

我听说有关Pentium I中的一个错误的传言,当在一个紧密的循环中给出一些无意义的指令系列会烧掉一个触发器如此之快,热保护无法保护它。

我发现的一次参考是真的老CPU可以通过在实模式下做到这一点:

 halt: jmp short halt 

正确的代码是

 halt: nop jmp short halt 

抱歉,代码不能在ARM处理器上运行。

在许多处理器中,设置状态字或影响处理器的指令仅限于“管理员”模式。 良好的操作系统以“受保护”模式运行用户代码,该模式与“管理员”模式不具有相同的function。 在用户模式下在现代处理器上执行特权指令会生成exception。

您和您的朋友总是可以在汇编语言参考手册中查找说明并validation操作。

除了重启机器之外,有问题的代码不太可能做多少。 根据我的经验,x86 CPU可以通过执行软件代码来实现。