在linux中哪些寄存器不受用户空间的影响?

Dr.*_*all 4 linux assembly kernel linux-kernel

如何找出linux内核保护哪些寄存器以防止用户程序集写入?

Job*_*Job 15

首先,请注意Linux内核本身并不能真正保护寄存器.它所做的只是确保用户应用程序以特权级别3(最低特权)运行.从那时起,它就是强制保护寄存器的处理器.

这是一个只能从权限级别0(即从内核)访问的寄存器列表:

  • 控制寄存器(CR0- CR4)
  • GDTR,LDTRIDTR(全局/本地/中断描述符表寄存器)
  • TR (任务登记册)
  • 调试寄存器(DR0- DR7)
  • 所有型号专用寄存器(MSRS)

您应该阅读英特尔系统编程手册的第5章,了解有关x86保护的详细说明.

  • 所有操作系统安全都基于 CPU 保护功能。但是您必须回溯很多很多年才能找到不支持某种形式的保护的处理器。此外,您*可以*从用户模式写入段寄存器 - 但是当与 GDT 结合时,这些值必须有意义(正如您所说,这是受限制的)。基本上,您只能将段寄存器设置为操作系统允许的那些有效值,这使得尝试更改它们在很大程度上毫无意义。但是其他寄存器(如控制寄存器)*永远*不能从环 3 写入,即使它们的值是有效的。 (2认同)