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

时间:2010-04-29 19:39:55

标签: c assembly cpu-registers

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

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

这是真的吗?

7 个答案:

答案 0 :(得分:18)

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

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

答案 1 :(得分:15)

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

答案 2 :(得分:9)

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

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

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

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

答案 3 :(得分:5)

没有。如果关键是为了打破它而狂热地对处理器进行锻炼,计算机系统需要散热解决方案(风扇,铜质热交换器,散热器等)以防止过热。如果散热解决方案出现故障,BIOS将断言#THERMTRIP并关闭机器。

答案 4 :(得分:1)

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

我发现曾经的参考资料是真正的旧CPU可以通过在实模式下完成来实现:

halt:
    jmp short halt

正确的代码是

halt:
    nop
    jmp short halt

答案 5 :(得分:1)

抱歉,代码无法在ARM处理器上运行。

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

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

答案 6 :(得分:0)

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