x86 - 哪些指令只能在内核模式下运行?

标签 x86 kernel mode

关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

7年前关闭。




Improve this question




哪些指令(针对 x86 芯片)只能在内核模式下运行?我试图了解用户模式和内核模式之间的实际区别。到目前为止,我知道只有在内核模式下才能访问一部分地址空间。该内存空间包含驱动程序等,应保护其免受用户程序的影响。另外,内核模式是如何在 CPU 中实际实现的? CPU 中是否有某个位变为 1 或发生类似情况?

编辑 : 之后
答案已在下面提供。

我只是在这里添加从答案中提到的链接复制的部分答案。

特权级别说明

指令说明

LGDT 将 GDT 的地址加载到 GDTR

LLDT 将 LDT 的地址加载到 LDTR

LTR 将任务寄存器加载到 TR

MOV 控制寄存器 复制数据并存储在控制寄存器中

LMSW 加载新机器状态字

CLTS 清除控制寄存器 CR0 中的任务切换标志

MOV Debug Register 复制数据并存储在调试寄存器中

INVD 使缓存无效,无需回写

INVLPG 使 TLB 条目无效

WBINVD 使用回写使缓存无效

HLT 暂停处理器

RDMSR 读取模型特定寄存器 (MSR)

WRMSR 写模型特定寄存器 (MSR)

RDPMC 读取性能监控计数器

RDTSC 读取时间戳计数器

最佳答案

这个问题更多地针对那些处理非常低级硬件细节的人(比如内核程序员),而不是那些处理通常被称为软件开发人员的高级问题的人。我会回答,因为我认为这仍然是计算机科学!

您不会想要运行用户应用程序,它会突然删除屏幕上的所有内容、删除硬盘驱动器中的所有数据、拒绝对任何硬件的任何访问、完全控制 CPU 资源等等,并且以非常不愉快的方式进行。内核是控制用户访问系统实用程序的主人。此外,如果一个用户应用程序失败,那么它将“独自”平静地死去!所以病毒经常以内核为目标,从而造成有意义的破坏。

这种保护不能通过软件有效地完成。这将要求操作系统检查用户应用程序的每条指令,确保没有恶意!一个例子是试图直接写入内核内存空间。例如,尝试访问地址 0 处的内存将产生一个称为 General Protection Fault 的中断。转至 the link below并搜索文本“特权级别说明”。

内核模式是通过配置系统寄存器来实现的,比如 GDTR(全局描述符表寄存器)。转至 the link below并搜索标题“全局描述符表”。根据该寄存器的配置,当违反特权级别时会生成通用保护故障中断。

链接:http://www.brokenthorn.com/Resources/OSDev23.html

关于x86 - 哪些指令只能在内核模式下运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21958244/

相关文章:

gcc - x86 asm - 从 esp 中减去 12 个字节。只需要8个

linux - linux如何同时支持32位和64位?还是 glibc 处理的东西?

visual-studio-2010 - _InterlockedIncrement 内部实现

linux - 内核是一个进程吗?

iOS 后台模式

c - 汇编将 MOV/MOVZX 和 MOVSX 转换为 C 代码(无内联汇编)

linux - iptables中表的意义

linux - 内联汇编可以关闭保护模式吗?

sql - SELECT 模式/模态值 SQL

protected - 为什么我不能从保护模式调用 BIOS 中断?