从用户模式进入0

时间:2011-01-08 03:31:32

标签: cpu-architecture

大多数现代操作系统都在受保护模式下运行。现在,用户程序可以通过直接设置某些控制寄存器中的相应位来输入“振铃0”。或者它是否必须通过一些系统调用。

我相信访问我们需要通过操作系统的硬件。但是,如果我们知道硬件设备的地址,我们可以参考设备的位置编写一些汇编语言代码并访问它。当我们在汇编语言代码中给出某些硬件设备的地址时会发生什么。

感谢。

3 个答案:

答案 0 :(得分:2)

要输入Ring 0,您必须执行系统调用,并且就其性质而言,系统控制您去的地方,因为对于调用,您只需给CPU一个索引,并且CPU在表中查看以了解什么打电话。您无法真正绕过安全方面(显然)做其他事情,但也许this link会有所帮助。

答案 1 :(得分:2)

您可以要求操作系统将硬件设备的内存映射到程序的内存空间。完成后,您只需从第3环读取和写入该内存即可。这是否可行,或取决于操作系统或设备。

答案 2 :(得分:2)

; set PE bit
mov cr0, eax
or eax, 1
mov eax, cr0
; far jump (cs = selector of code segment)
jmp cs:@pm

@pm:
; Now we are in PM

取自维基百科。

基本思路是在 cr0 控制寄存器中设置(到1) 0th 位。

但是如果你已经处于保护模式(即你在windows / linux中),安全性会限制你这样做(你处于第3环 - 最低信任度)。

所以成为第一个进入保护模式的人。