【问题标题】:Could this code damage my processor?此代码会损坏我的处理器吗?
【发布时间】:2011-02-13 23:29:35
【问题描述】:

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

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

这是真的吗?

【问题讨论】:

  • 有趣。如果可以编写代码来直接损坏处理器,我会感到震惊,但肯定有可能从应用程序中创建系统不稳定,从而导致系统在重新启动之前完全失败。
  • 不,这不是真的,但它会让你的显示器爆炸。
  • 嗯,你试过了吗?
  • 每个人都知道 HCF 是破坏你机器的指令。 en.wikipedia.org/wiki/Halt_and_Catch_Fire
  • 我听说运行此代码将为您带来 +1000 StackOverflow 声誉。

标签: c assembly cpu-registers


【解决方案1】:

除了重启机器之外,有问题的代码不太可能做很多事情。根据我的经验,x86 CPU 可能会因执行软件代码而变砖。

【讨论】:

    【解决方案2】:

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

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

    您和您的朋友可以随时查看汇编语言参考手册中的说明并验证操作。

    【讨论】:

      【解决方案3】:

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

      查看 Intel 或 AMD 系统编程手册,它们会告诉您在将无效位写入控制寄存器时会引发哪些异常。

      【讨论】:

      • 三重故障通常会触发重启。
      • 无论如何,双重错误处理程序获取都应该来自任务门,并带有一个“安全”CR3 值供 CPU 加载,以及安全堆栈和寄存器值。粉碎 CR3“不应该”对系统造成三重故障(理论上),但这仍然不是一个好主意。
      【解决方案4】:

      我听说 Pentium I 中有一个错误,即当在一个紧密的循环中给出一系列荒谬的指令时,会以如此快的速度烧毁一个触发器,以至于热保护无法保护它。

      我曾经找到的参考是真正的旧 CPU 可以通过在实模式下执行此操作来处理:

      halt:
          jmp short halt
      

      正确的代码是

      halt:
          nop
          jmp short halt
      

      【讨论】:

      • 能否也提供给我们参考?
      • 我真诚地怀疑这一点。 AFAIK Pentium 1 没有热保护。此外,即使在最大功耗的情况下,任何英特尔批准的散热器都足以保持核心温度受到控制。 intel.com/design/pentium/datashts/24199710.pdf
      【解决方案5】:

      没有。如果关键是要狂热地锻炼处理器以希望破坏它,那么计算机系统有散热解决方案(风扇、铜热交换器、散热器等)来防止过热。如果散热解决方案出现故障,BIOS 将断言#THERMTRIP 并关闭机器。

      【讨论】:

        【解决方案6】:

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

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

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

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-11-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多