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

标签 c assembly cpu-registers

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

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 移动成功,您也很有可能会导致三重错误,因为它控制页表地址,您可能会在指令获取、处理程序获取和双重错误处理程序获取上遇到错误。如果发生这种情况,CPU 应该直接关闭。

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

关于此代码会损坏我的处理器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2740268/

相关文章:

ubuntu - 64 位汇编语言在 ubuntu 上使用 nasm

assembly - MASM 有::运算符吗?

c - 了解 UART 寄存器索引

c - 使用宏在运行时堆栈中优雅地创建可变大小的“2D指针”列表

c - 随机 malloc 崩溃?

algorithm - 在并行位片代码中实现快速计数器

c - 在c中访问进程独立寄存器的值

c# - 哪些场景最大限度地发挥了 x64 系统中更高寄存器数量对 C# 代码的性能影响?

c - 如何在线程之间共享变量?

C - 如何使用 grep 查找所有内部循环?