首页 > 其他分享 >2.6.ReactOS系统中从内核中发起系统调用

2.6.ReactOS系统中从内核中发起系统调用

时间:2024-10-17 12:53:39浏览次数:10  
标签:ZwReadFile 调用 ReactOS 函数 系统 内核 2.6

2.6.ReactOS系统中从内核中发起系统调用

2.6.ReactOS系统中从内核中发起系统调用

文章目录


前言

上面我们已经可以看到用户空间(R3)进行系统调用的全过程即两种方法的具体实现。

系统调用一般时从R3发起的。其实window也运行从内核进行系统调用,不过,一般而言在内核里面不能直接调用NtReadFile()一类函数。这方面是因为windows内核并不导出这些函数。另一方面也是应为这些函数往往要求在系统空间队长上有一个属于本次调用的自陷框架,从而内核中直接调用这些函数时显然没有这么一个口昂加,诚然。既然CPU已经运行在内核中,系统空间堆栈上就已经有这样的框架了。 那可能时自陷框架,中断框架或者异常框架。但都不是味本次调用而形成的。所以内核中一般不能直接调用NtReadFile()一类的函数。这就是为什么在内核中只能通过ZwReadFile()一类函数进行系统调用的原因。那么ZwReadFile()时什么样的函数呢?下面有ReactOS中的代码:

__declspec(naked)__stdcall 
ZwReadFile(int dummy0,int dummy1,int dummy2)
{
asm{
		mov eax,151
		lea edx,[esp+4] 		//使EDX指向堆栈的参数块
		pushf					//EFLAGS	
		push KGDT_R0_CODE 		//CS
		call _KiSystemService 
		ret 36					//9个参数
 	}
}

这里中间函数调用KiSystemService(),在哪里构建堆栈上的系统调用框架,这点上与通过“int 0x2e"进入内核相似,但是此时当然无需保证用户空间的CS,SS,ESP等寄存器的映射。这样这里的EDX指向堆栈上的参数块。

到这里系统调用返回时,在TRAP_EPILOG末尾处有这么几条指令。

.if _SystemCall 
/*Check if previous CS is from user-mode*/
test dword ptr[esp+4],1
;it's,so ues Fast Exit
jnz FastExit //来自用户空间(R3)

//jump back to stub 		//来自系统空间(R0)
pop edx  						//KiSystemService()的返回地址
pop ecx 						//KGDT_R0_CODE
popf 
jmp edx						//挑战到调用KiSystemService时的返回地址

对于来自R0的系统调用,这里 有4条指令实现返回,队长上面中间函数ZwReadFile()的代码,读者不难理解这4条指令的左右红。

类似ZwReadFile()中间函数有两百多个。ReactOS提供了生成这些函数的工具。以系统调用NtReadFile()为例子,这个工具根据sysfuncs.lst生成其用户空间的(R3)的中间函数NtReadFile()和内核版本的中间函数ZwReadFile()的代码,内核版本的中间函数ZwReadFile()的生成"模板为"

#define KernelModeStub_x86  "    asm { \n" \
                            "        mov eax, %xh\n" \
                            "        lea edx, [esp+4]\n" \
                            "        pushf\n" \
                            "        push KGDT_R0_CODE\n" \
                            "        call _KiSystemService\n" \
                            "        ret %xh\n" \
                            "    }\n"

这里需要填入的参数只有两个,一个时系统调用号,另一个时调用参数的数量,课件这些中间函数的生成时很简单的。 到处这些中间函数而颖仓实际的系统调用函数。就为可能为逆向工程设置了障碍。

标签:ZwReadFile,调用,ReactOS,函数,系统,内核,2.6
From: https://blog.csdn.net/zhyjhacker/article/details/143004843

相关文章

  • 内核提供的通用I2C设备驱动I2C-dev.c分析:file_ops篇
    往期内容I2C子系统专栏:I2C(IIC)协议讲解-CSDN博客SMBus协议详解-CSDN博客I2C相关结构体讲解:i2c_adapter、i2c_algorithm、i2c_msg-CSDN博客内核提供的通用I2C设备驱动I2c-dev.c分析:注册篇总线和设备树专栏:总线和设备树_憧憬一下的博客-CSDN博客设备树与Linux内核设备......
  • 内核空间总结
    内核空间是内存中专门为内核代码保留的区域,负责执行操作系统的核心功能。Linux内核的所有代码都在内核空间中运行,并且这些代码在内核态下执行。内核态是系统的高权限运行模式,允许对系统资源(如内存、硬件设备和I/O操作)进行直接访问和管理。运行在内核空间中的关键组件,如内核......
  • 四,多节点和内核接口开发
    一,多节点思想1.什么是多节点一个设备对应一个节点文件(设备文件)2.多节点实现的方法linux2.6的连续注册class类的生成多个设备文件3.一个LED灯的多节点的代码#include"linux/kernel.h"#include"linux/module.h"//基本必须头文件#include"linux/fs.h"//申请设备号......
  • centos7 升级内核
    1.更新系统yumupdate-y2.添加elrepo软件源yuminstallvim-yvi/etc/yum.repos.d/elrepo.repo添加以下内容[elrepo]name=elrepobaseurl=https://mirrors.aliyun.com/elrepo/archive/kernel/el7/x86_64gpgcheck=0enabled=13.刷新源数据缓存yumcleanall&&yumm......
  • 数学建模习题2.6
    importnumpyasnpimportmatplotlib.pyplotaspltfrommpl_toolkits.mplot3dimportAxes3D模拟高程数据(假设数据已经过某种方式插值或生成)这里我们创建一个简单的40x50网格,并填充随机高程值x=np.linspace(0,43.65,40)y=np.linspace(0,58.2,50)X,Y=np.meshgr......
  • 【linux内核】系统调用与内核API
    原创星火可以燎燃星火技术今天,我们将探讨系统调用的概念以及Linux内核API是如何工作的,这将帮助我们更好地理解Linux系统的工作原理。一、系统调用的重要性系统调用是操作系统提供给应用程序的一组接口,使得应用程序可以直接请求操作系统内核执行某些任务,比如读写文件、创建......
  • 【linux内核】内核编译与模块加载
    原创星火可以燎燃星火技术在前面的课程中,我们学习了如何在Linux系统中使用加密技术来保护数据的安全。今天,我们将探讨如何在Linux系统中编译内核以及加载内核模块,这对于优化系统性能和适应特定硬件需求非常重要。一、内核的重要性Linux内核是操作系统的核心部分,负责管理系......
  • 计算机基础(用户态与内核态)
    计算机基础(用户态与内核态)0.Linux整体架构图1.什么是用户态什么是内核态?故事理解​ 张三是某科技公司的运维工程师(低权限),在15楼办公码代码,公司提供的资源仅有一套电脑(用户态)​ 张三,奋斗5年终于当上了sre工程师(高权限),之后张三搬到30楼,可以随时向资源部(系统调用)申请......
  • Spark之RDD内核原理,MR的原理计算回顾,RDD的洗牌(shuffle)过程,RDD优化之避免shuffle过程
    学习:知识的初次邂逅复习:知识的温故知新练习:知识的实践应用目录一,MR的shuffle回顾1,Map阶段:2,Shuffle阶段:3,Reduce阶段:二,spark的shuffle介绍 1,两种洗牌的方式2,spark的计算是要尽量避免进入shuffle计算三,并行度1,资源并行度 2,数据并行度一,MR的shuffle回顾1,M......
  • 第103天:权限提升-Linux系统&辅助项目&脏牛&Dirty&内核漏洞&SUID&GUID
    知识点梳理#知识点:1、Linux提权辅助项目-探针&漏扫2、Linux提权-配置SUID&内核CVE#系列内容:内核,数据库,第三方服务,SUID&GUID,定时任务,环境变量,SUDO,权限不当等脏牛漏洞(CVE-2016-5195)DirtyPipe(CVE-2022-0847)SUDO(CVE-2021-3156)Polkit(CVE-2021-4034)案例演示Linux-辅......