内核学习-系统调用《下》

本文继续探讨系统调用的学习,分析了KiFastCallEntry和KiSystemService在填充_KTRAP_FRAME后的执行流程。文章介绍了如何根据系统服务号找到内核函数地址,并提及了SSDT(系统服务描述符表)的作用。此外,还提到了系统服务表和Win32k.sys驱动的相关信息。通过对实验的描述,读者可以更深入地理解3环到0环的交互过程。
摘要由CSDN通过智能技术生成

💂 个人主页: 你的小甜欣.~_CSDN博客
🤟 每天更新/学习教程/WEB安全/内网渗透/二进制安全/逆向工程/等文章,大家可以持续关注
💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦。
💅 有任何问题欢迎私信,看到会及时回复!


 

系统调用的学习

上文回顾

上篇文章分析得到:

1.3环进0环的两种方式,分别是中断门和快速调用,CPU支持快速调用,那么_KUSER_SHARED_DATA 结构体的 SystemCall 属性指向的函数是 KiFastSystemCall,执行 KiFastSystemCall,使用快速调用的方式进0环;如果不支持,那么SystemCall 指向的函数是KiIntSystemCall,执行 KiIntSystemCall,使用中断门的方式进0环。

2.快速调用不需要访问内存,而中断门需要读TSS和IDT表

3.int 0x2e 和 sysenter 指令进0环后,分别调用了两个函数 KiSystemService 和 KiFastCallEntry。

4.原来的寄存器存储到了_KTRAP_FRAME 结构体里,3环API参数指针通过EDX传给0环。

上篇文章分析结果,两个函数最后执行同一段代码,如图

图中标记的是407781函数,之后是执行的相同代码部分,7781函数在_KiFastCallEntry函数内部。图片太大没法截图全部。

在这里插入图片描述

KiSystemService / KiFastCallEntry 填充_KTRAP_FRAME 后续部分

这两个函数虽然入口不同,但是填充完 _KTRAP_FRAME 后,就会执行相同的代码。

预备知识:

eax中存储的系统服务号 0BAh

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值