标签:proc 系统调用 位置 ros mac 步骤 ptr 懒加载 script
系统调用-SharedCode
2020年3月17日
0:38
SharedCode
SharedCode是参考ReactOS取的名, 之所以称为"Shared"是因为不管是KiSysteService还是KiFastCallEntry,正常流程都会执行到这个位置. SharedCode里面才包含真正的调用目标函数的过程, KiSystemService和KiFastCallEntry中只是做了一些数据保存相关的操作.
获取系统服务表
一进入SharedCode首先会对系统服务号进行处理.
bit12~bit13用来表示目标系统服务是哪个模块, 姑且称为系统服务模块号. 0:nt模块 1:Win32k 2和3未使用.
ETHREAD.Tcb.ServiceTable指向了一个数组, 这个数据包含了4个SYSTEM_SERVICE_TABLE结构, SYSTEM_SERVICE_TABLE结构大小是16个字节, 也就是0x10
检查索引是否越界
系统服务号的bit0~bit11一共12位, 用来表示函数地址表和函数参数表的索引.
KSYSTEM_SERVICE_TABLE.NumberOfService表示了函数的个数. 如果索引 >= 个数, 说明索引越界了.
加载Win32k
当系统服务模块号为1,表示这个模块是win32k. win32k在进程创建的时候并不会被立即加载, 而是懒加载:第一次调用win32k相关的函数时加载.
系统调用
执行到最后,这里才是关键步骤:
Created with Microsoft OneNote 2016.
标签:proc 系统调用 位置 ros mac 步骤 ptr 懒加载 script
原文地址:https://www.cnblogs.com/joneyyana/p/12535663.html