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

Osa*_*mal 12 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"
        )
    }
}
Run Code Online (Sandbox Code Playgroud)

真的吗?

小智 18

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

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

  • 三重故障通常会触发重启. (2认同)
  • 无论如何,双故障处理程序的获取应该来自任务门,并具有供 CPU 加载的“安全”CR3 值以及安全堆栈和寄存器值。粉碎 CR3“不应该”使系统出现三重故障(理论上),但这仍然不是一个好主意。 (2认同)

Ser*_*pth 15

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


Kos*_*801 9

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

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

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

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


Wil*_*ara 5

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