驱动之路_用户模式和内核模式

在CPU的所有指令中,有一些指令是非常危险的,如果错用,将导致整个系统崩溃。比如:清内存、设置时钟等。如果所有的程序都能使用这些指令,那么你的系统一天死机n回就不足为奇了。所以,CPU将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通的应用程序只能使用那些不会造成灾难的指令。形象地说,特权指令就是那些儿童不宜的东东,而非特权指令则是老少皆宜。 Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3。Windows只使用RING0和RING3,RING0只给操作系统用,RING3谁都能用。
简介
Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3。Windows只使用其中的两个级别RING0和RING3,RING0只给操作系统用,RING3谁都能用。如果普通应用程序企图执行RING0指令,则Windows会显示“非法指令”错误信息。因为有CPU的特权级别作保护。
 
 
 
SSDT,系统服务描述表   相当于window api  和  内核API搭了一个桥梁,.
 
SSDT表
7A   4DEES(函数地址)
 
ntdll.dll   内核API
 
openProcess --> kernel32.dll  --> ZwOpenProcess(他在里面调用了 KiFastSystemCall)
ZwOpenProcess代码:
这个7FFE0300就是KiFastSystemCall
 
这个7A就相当于一个服务号,然后调用7FFE0300(KiFastSystemCall),个函数根据eax中的service id在SSDT中查找相应的系统服务,然后调用之。
KiFastSystemCall代码:
SYSENTER  切换到内核模式后,然后根据eax,去查询ssdt表相对应的内核函数,也就是NtOpenProcess
 
整个流程就是这样.
 
posted @ 2013-09-01 13:24  宝贝,我永远都在  阅读(319)  评论(0)    收藏  举报