大多数现代操作系统都在受保护模式下运行。现在,用户程序可以通过直接设置某些控制寄存器中的相应位来输入“振铃0”。或者它是否必须通过一些系统调用。
我相信访问我们需要通过操作系统的硬件。但是,如果我们知道硬件设备的地址,我们可以参考设备的位置编写一些汇编语言代码并访问它。当我们在汇编语言代码中给出某些硬件设备的地址时会发生什么。
感谢。
答案 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环 - 最低信任度)。
所以成为第一个进入保护模式的人。