用户内核模式切换(Windows内核学习笔记)

本文介绍了Windows中用户层到内核层的模式切换,包括通过int 0x2e自陷指令和sysenter/sysexit快速调用。详细讲解了自陷调用的参数传递、寄存器保护,以及sysenter指令如何提高执行效率,深入剖析了系统调用的过程。
摘要由CSDN通过智能技术生成

Inter x86将处理器执行模式分为4层环,我们平时说的用户层程序处于3环(Ring3),内核层代码处于0环(Ring0),而Ring3的地址空间是各进程之间独立的,Ring0层是进程之间共享,不同进程会由进程上下背景文的切换来实现对Ring0层访问。Windows中并没有使用Ring1和Ring2层。
我们的用户层进程通过系统服务来完成我们需要完成的工作,而系统服务是在内核层实现的,那么就需要CPU就要从Ring3层的调用切入Ring0层,那么这个过程是如何实现的?
进入内核一般有中断、异常、自陷三种手段,而如果是我们平时函数正常系统调用,会通过自陷指令(int 0x2e)让CPU主动进入系统空间,对于应用程序而言,相当于执行了一次函数调用。还有一种称为快速调用约定的sysenter和sysexit指令,也是调用系统服务,并为此配备了SYSENTER_CS_MSR、SYSENTER_EIP_MSR、SYSENTER_ESP_MSR三个MSR(Mode Specific Register)寄存器。
接下来说一说这二者分别是怎么进行执行的,首先来说传统的Windows系统调用自陷指令int 0x2e:
以经典的ReadFile函数(因为我看的书是拿这个函数举例的)来进行解释,我们调用一个WinAPI ReadFile函数,其位于kernel32.dll的导出函数中,在用户层这个函数内部调用的是ntdll下的Nt系列的函数NtReadFile,该函

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KookNut39

感谢您请我喝咖啡哈哈哈哈

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值