一个朋友向我发送了该代码,并声称可能会损坏处理器。真的吗?

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移动的一部分成功,您也有一个不错的机会,您会导致三重故障,因为它控制着页面表地址,并且您可能会在指令获取,处理程序获取以及双故障处理程序Fetch上获得故障。如果发生这种情况,CPU应该仅关闭。

检查Intel或AMD手册中的系统编程,他们会告诉您在为控制寄存器编写无效的位时会抛出哪些例外。

其他提示

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

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

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

即使在任何代码都可能损坏处理器的情况下,处理器制造商也可以发出所谓的Microcododepate,就像处理器的软框一样。此类微型码头由操作系统和/或BIOS(以及处理器制造商)提供,并在执行此类代码之前将其加载到处理器中。

总而言之:不,您的朋友错了,假设我们正在谈论X86/X64平台。

否。如果要点要狂热地锻炼处理器以希望打破它,那么计算机系统具有热溶液(风扇,铜热交换器,散热器等),以防止过热。如果在热溶液中发生故障,BIOS将断言#ThermTrip并关闭机器。

我听说五角星I中有一个虫子的传言,当在紧密循环中赋予一系列毫无意义的说明时,会燃烧一个触发器,因此热保护无法保护它。

我发现一次真正是旧的CPU,可以通过在实际模式下进行烹饪:

halt:
    jmp short halt

正确的代码是

halt:
    nop
    jmp short halt

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

在许多处理器中,设置状态单词或影响处理器的说明仅限于“主管”模式。良好的操作系统以“受保护”模式运行的用户代码,其功能与“主管”模式不同。在用户模式下对现代处理器执行特权说明会生成异常。

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

除了重新启动机器之外,所讨论的代码不太可能做很多事情。以我的经验,可以通过执行软件代码来弄清X86 CPU。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top