首页 > 系统相关 >Windows用户态到内核态

Windows用户态到内核态

时间:2022-10-26 22:15:35浏览次数:57  
标签:返回 函数 Windows MSR 态到 指令 内核 对应

Windows提供了API接口供程序使用,可以使用操作系统提供的功能。

大部分的API具体实现代码都在内核态R0层,用户态R3层的接口仅仅只有一小部分代码,用于调用内核态的代码。

在Windows 2000中通过中断指令int 2E进入内核态,EAX寄存器保存函数编号,用于在系统服务表中找到对应的函数。

int 2E会找到IDT表中索引为0x2E对应的函数,在windbg中可以使用!idt 2E指令查看分发系统服务函数的函数为nt!KiSystemService

通过中断调用系统服务,切换过程繁琐,CPU必须从内存中分别加载门描述符和段描述符才能得到KiSystemService()的地址,速度慢,还需要进行权限检查。

为了实现快速系统调用,奔腾Ⅱ处理器引入了Sysenter/SYSEXIT指令,AMD K7引入了SYSCALL/SYSRET指令。

在全局描述符中存放了建立四个断描述符。

供SYSENTER指令使用的MSR寄存器如下:

SYSENTER_CS_MSR    MSR地址为174h     含义为:目标代码段的CS选择子   在windbg中使用  rdmsr 174

SYSENTER_ESP_MSR  MSR地址为175h     含义为:目标ESP    在windbg中使用  rdmsr 175

SYSENTER_EIP_MSR   MSR地址为176h     含义为:目标EIP     在windbg中使用  rdmsr 176   对应nt!KiFastCallEntry

下面是系统调用的指令分别对应入口函数及返回指令、函数

INT 2E    对应KiSystemService   返回指令 iret  返回时的内核函数 KiSystemCallExit

sysenter 对应KiFastCallEntry      返回指令  sysexit  返回时的内核函数 KiSystemCallExit2

syscall    对应KiFastCallEntry      返回指令  sysret  返回时的内核函数 KiSystemCallExit2

 

从内核态到用户态可以通过如下方式:

nt!KeUserModeCallback   这是通过传入一个索引值,然后在PEB中的kernelcallbacktable表中寻找对应函数,调用完成后通过CallBackReturn类似函数中的 int 2B指令返回内核。

标签:返回,函数,Windows,MSR,态到,指令,内核,对应
From: https://www.cnblogs.com/ps12345678/p/16830263.html

相关文章