【软件逆向-kisystemservice kiFastSystemCall kiIntSystemCall 关系及作用】 此文章归类为:软件逆向。
KiSystemService、KiFastSystemCall、KiIntSystemCall 是 Windows 内核中与系统调用相关的函数,它们的关系及作用如下:
三者之间的关系
KiFastSystemCall 和 KiIntSystemCall 是进入内核模式的不同途径 4 :在 Windows 系统中,当用户模式的程序需要调用内核服务时,根据 CPU 是否支持快速调用,会选择不同的方式进入内核模式。如果 CPU 支持快速调用,_KUSER_SHARED_DATA 结构体的 SystemCall 属性指向 KiFastSystemCall,执行 KiFastSystemCall,使用快速调用的方式进入内核模式;如果不支持,SystemCall 指向 KiIntSystemCall,执行 KiIntSystemCall,使用中断门的方式进入内核模式,即 KiFastSystemCall 通过 sysenter 指令快速进入内核,KiIntSystemCall 则通过 int 0x2e 中断指令进入内核。KiSystemService 是系统调用进入内核后的处理函数 4 :无论是通过 KiFastSystemCall 还是 KiIntSystemCall 进入内核,最终都会进入 KiSystemService 或 KiFastCallEntry 函数进行后续处理,KiSystemService 和 KiFastCallEntry 在填充完_KTRAP_FRAME 后,都会执行相同的代码来处理系统调用请求。三者的作用
KiFastSystemCall 的作用 :提供一种快速进入内核模式的途径,减少了进入内核时的一些开销,不需要访问内存去读取 TSS 和 IDT 表1 。它将用户模式下的参数等信息通过特定寄存器传递到内核模式,为后续内核处理系统调用做好准备,其主要通过 mov edx,esp 和 sysenter 指令,把栈指针赋值给 edx 寄存器并进入内核4 。KiIntSystemCall 的作用 :在 CPU 不支持快速调用的情况下,作为进入内核模式的替代方式。它通过执行 int 0x2e 指令触发中断,使 CPU 从用户模式切换到内核模式,在切换过程中,会访问 TSS 和 IDT 表来获取相关信息,以完成模式切换和系统调用的准备工作,例如将参数指针通过 edx 寄存器传递给内核4 。KiSystemService 的作用 :主要负责在系统调用进入内核后进行一系列的处理工作。包括根据系统调用号查找对应的系统服务函数地址,将用户空间堆栈中的参数复制到系统空间堆栈,构建陷阱帧(trap frame)来保存现场信息等,以便内核能够正确地执行系统服务函数,并在系统服务函数执行完成后,进行一些清理和返回相关的操作,例如调用 KiServiceExit 来处理返回用户模式的工作。
更多 【软件逆向-kisystemservice kiFastSystemCall kiIntSystemCall 关系及作用】 相关视频教程: www.yxfzedu.com