码迷,mamicode.com
首页 > 其他好文 > 详细

系统调用-KiSystemService

时间:2020-03-21 00:03:53      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:proc   系统调用   位置   ros   mac   步骤   ptr   懒加载   script   

系统调用-SharedCode

2020年3月17日

0:38

SharedCode

SharedCode是参考ReactOS取的名, 之所以称为"Shared"是因为不管是KiSysteService还是KiFastCallEntry,正常流程都会执行到这个位置.  SharedCode里面才包含真正的调用目标函数的过程, KiSystemServiceKiFastCallEntry中只是做了一些数据保存相关的操作.

 

获取系统服务表

一进入SharedCode首先会对系统服务号进行处理

bit12~bit13用来表示目标系统服务是哪个模块, 姑且称为系统服务模块号.   0:nt模块   1:Win32k   23未使用.

ETHREAD.Tcb.ServiceTable指向了一个数组, 这个数据包含了4SYSTEM_SERVICE_TABLE结构, SYSTEM_SERVICE_TABLE结构大小是16个字节, 也就是0x10

技术图片

 

技术图片

 

 

检查索引是否越界

系统服务号的bit0~bit11一共12, 用来表示函数地址表和函数参数表的索引.

KSYSTEM_SERVICE_TABLE.NumberOfService表示了函数的个数. 如果索引 >= 个数, 说明索引越界了.

技术图片

 

加载Win32k

当系统服务模块号为1,表示这个模块是win32k.  win32k在进程创建的时候并不会被立即加载, 而是懒加载:第一次调用win32k相关的函数时加载

 

技术图片

 

 

系统调用

执行到最后,这里才是关键步骤

  1. 系统调用计数器+1.
  2. 通过函数地址表找到目标函数地址.
  3. 复制3环参数到0环堆栈.
  4. 调用目标函数.

技术图片

 

 

 

Created with Microsoft OneNote 2016.

系统调用-KiSystemService

标签:proc   系统调用   位置   ros   mac   步骤   ptr   懒加载   script   

原文地址:https://www.cnblogs.com/joneyyana/p/12535663.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!