大理寺少卿 发表于 2025-3-17 20:10:00

驱动开发与系统原理-系统调用流程

概述
----

首先我们的操作系统分为R3和R0,我们编写的exe文件如果调用了API就会出现一个调用流程

![](https://raw.githubusercontent.com/Whitebird0/tuchuang/main/QQ%E6%88%AA%E5%9B%BE20211209172154.png)

这是32位下的系统API调用流程,64位以后再说

我们一般进内核有这么几种方法

   int 2E      //中断门
    SystemEntry           //32位
    SystenCall           //64位
在内核中,系统通过SSDT查找内核API

SSDT(system service dispatch table) 系统服务分派表,是最常用的.SHADOW         SSDT,常用于绘图的API

实验

```

                  #include<stdio.h>
                  #include<Windows.h>

                  int main(){
                           _asm{
                                    int 3
                           }
                           OpenProcess(PROCESS_ALL_ACCESS, TRUE, 2836);
                  }
```
1.首先是调用3环下的OpenProcess

![](https://raw.githubusercontent.com/Whitebird0/tuchuang/main/QQ%E6%88%AA%E5%9B%BE20211209174129.png)

2.进入到了Kernel32.dll中的OpenProcess

![](https://raw.githubusercontent.com/Whitebird0/tuchuang/main/QQ%E6%88%AA%E5%9B%BE20211209174154.png)

3.进入Kernel32Base.dll中的OpenProcess

![](https://raw.githubusercontent.com/Whitebird0/tuchuang/main/QQ%E6%88%AA%E5%9B%BE20211209174221.png)

4.调用ntdll.dll中的Zw/NtOpenProcess,EAX为0xBE,对应试十进制为190,我们可以去PCHUNTER中找到index为190的API,在这之前先call KiFastCall
![](https://raw.githubusercontent.com/Whitebird0/tuchuang/main/QQ%E6%88%AA%E5%9B%BE20211209174700.png)

![](https://raw.githubusercontent.com/Whitebird0/tuchuang/main/QQ%E6%88%AA%E5%9B%BE20211209174238.png)

5.使用SystemEntry指令

![](https://raw.githubusercontent.com/Whitebird0/tuchuang/main/QQ%E6%88%AA%E5%9B%BE20211209180200.png)

898727201 发表于 2025-3-21 19:24:19

热心回复, 谢谢分享技术文章
页: [1]
查看完整版本: 驱动开发与系统原理-系统调用流程