当前位置: 首页 > news >正文

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

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

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,151lea edx,[esp+4] 		//使EDX指向堆栈的参数块pushf					//EFLAGS	push KGDT_R0_CODE 		//CScall _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"

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

相关文章:

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

2.6.ReactOS系统中从内核中发起系统调用 2.6.ReactOS系统中从内核中发起系统调用 文章目录 2.6.ReactOS系统中从内核中发起系统调用前言 前言 上面我们已经可以看到用户空间(R3)进行系统调用的全过程即两种方法的具体实现。 系统调用一般时从R3发起的…...

chat_gpt回答:python获取当前utc时间,将xml里时间tag里的值修改为当前时间

你可以使用 lxml 库来读取、修改 XML 文件中的某个标签的值,并将其保存为新的 XML 文件。以下是一个示例代码,展示如何获取当前的 UTC 时间,并将 XML 文件中的某个时间标签修改为当前时间。 示例代码: from lxml import etree f…...

机器学习-语言分析

机器学习 1.1人工智能概述 1.2.1 机器学习与人工智能,深度学习 深度学习->机器学习->人工智能; 人工智能:1950,实现自动下棋,人机对弈,达特茅斯会议->人工智能的起点,1956年8月。克劳…...

Oracle 常见索引扫描方式概述,哪种索引扫描最快!

一.常见的索引扫描方式 INDEX RANGE SCANINDEX FAST FULL SCANINDEX FULL SCAN(MIN/MAX)INDEX FULL SCAN 二.分别模拟使用这些索引的场景 1.INDEX RANGE SCAN create table t1 as select rownum as id, rownum/2 as id2 from dual connect by level<500000; create inde…...

字符串(3)_二进制求和_高精度加法

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 字符串(3)_二进制求和_高精度加法 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目…...

《神经网络:智能时代的核心技术》

《神经网络&#xff1a;智能时代的核心技术》 一、神经网络的诞生与发展二、神经网络的结构与工作原理&#xff08;一&#xff09;神经元模型&#xff08;二&#xff09;神经网络训练过程 三、神经网络的应用领域&#xff08;一&#xff09;信息领域&#xff08;二&#xff09;…...

pdf内容三张以上转图片,使用spire.pdf.free

一、依赖 <spire.pdf.free.version>9.13.0</spire.pdf.free.version><itextpdf.version>5.5.13</itextpdf.version><dependency><groupId>e-iceblue</groupId><artifactId>spire.pdf.free</artifactId><version>$…...

游戏、软件、开源项目和资讯

游戏 标题链接【白嫖正版游戏】IT之家喜加一website 软件 标题链接【白嫖正版软件】反斗限免website 开源项目 标题链接【Luxirty Search】基于Google搜索结果&#xff0c;屏蔽内容农场Github【Video2X】图片/视频超分工具Github 新闻资讯 标题链接分享10个 Claude 3.5 …...

Acrel-1000变电站综合自动化系统及微机在化工企业中的应用方案

文&#xff1a;安科瑞郑桐 摘要&#xff1a;大型化工企业供配电具有的集约型特点&#xff0c;化工企业内35kV变电站和10kV变电所数量大、分布广&#xff0c;对于老的大多大型及中型化工企业而言&#xff0c;其变电站或变电所内高压电气设备为旧式继电保护装置&#xff0c;可靠…...

[Linux] CentOS7替换yum源为阿里云并安装gcc详细过程(附下载链接)

前言 CentOS7替换yum源为阿里云 yum是CentOS中的一种软件管理器&#xff0c;通过yum安装软件&#xff0c;可以自动解决包依赖的问题&#xff0c;免去手工安装依赖包的麻烦。 yum使用了一个中心仓库来记录和管理软件的依赖关系&#xff0c;默认为mirrorlist.centos.org&#xf…...

在Java中创建多线程的三种方式

多线程的创建和启动方式 在Java中&#xff0c;创建多线程主要有以下三种方式&#xff1a; 继承Thread类实现Runnable接口使用Callable接口与Future 下面是这三种方式的简单示例&#xff0c;以及如何在主类中启动它们。 1. 继承Thread类 class MyThread extends Thread {Ov…...

洛谷 AT_abc374_c [ABC374C] Separated Lunch 题解

题目大意 KEYENCE 总部有 N N N 个部门&#xff0c;第 i i i 个部门有 K i K_i Ki​ 个人。 现在要把所有部门分为 AB 两组&#xff0c;求这两组中人数多的那一组的人数最少为多少。 题目分析 设这些部门共有 x x x 个人&#xff0c;则较多的组的人数肯定大于等于 ⌈ …...

力扣2528.最大化城市的最小电量

力扣2528.最大化城市的最小电量 题目解析及思路 题目要求找到所有城市电量最小值的最大 电量为给城市供电的发电站数量 因此每座城市的电量可以用一段区间和表示&#xff0c;即前缀和 二分最低电量时 如果当前城市电量不够,贪心的想发电站建立的位置&#xff0c;应该是在mi…...

【zookeeper】集群配置

zookeeper 数据结构 zookeeper数据模型结构&#xff0c;就和Linux的文件系统类型&#xff0c;看起来是一颗树&#xff0c;每个节点称为一个znode.每一个Znode默认的存储1MB的数据&#xff0c;每个Znode都有唯一标识&#xff0c;可以通过命令显示节点的信息每当节点有数据变化…...

YOLO11 目标检测 | 导出ONNX模型 | ONNX模型推理

本文分享YOLO11中&#xff0c;从xxx.pt权重文件转为.onnx文件&#xff0c;然后使用.onnx文件&#xff0c;进行目标检测任务的模型推理。 用ONNX模型推理&#xff0c;便于算法到开发板或芯片的部署。 备注&#xff1a;本文是使用Python&#xff0c;编写ONNX模型推理代码的 目…...

PostgreSQL DBA月度检查列表

为了确保数据库系统能够稳定高效运行&#xff0c;DBA 需要定期对数据库进行检查和维护&#xff0c;这是一项非常具有挑战性的工作。 本文给大家推荐一个 PostgreSQL DBA 月度性能检查列表&#xff0c;遵循以下指导原则可以帮助我们实现一个高可用、高性能、低成本、可扩展的数…...

驱动开发系列12 - Linux 编译内核模块的Makefile解释

一:内核模块Makefile #这一行定义了要编译的内核模块目标文件。obj-m表示目标模块对象文件(.o文件), #并指定了两个模块源文件:helloworld-params.c 和 helloworld.c。最终会生成这 #这两个.c文件的.o对象文件。 obj-m := helloworld-params.o helloworld.o#这行定义了内核…...

用js+css实现圆环型的进度条——js+css基础积累

如果用jscss实现圆环型的进度条&#xff1a; 直接上代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><met…...

TDengine 与北微传感达成合作,解决传统数据库性能瓶颈

在当今物联网&#xff08;IoT&#xff09;快速发展的背景下&#xff0c;传感器技术已成为各个行业数字化转型的关键组成部分。随着设备数量的激增和数据生成速度的加快&#xff0c;如何高效地管理和分析这些数据&#xff0c;成为企业实现智能化运营的重要挑战。尤其是在惯性传感…...

通过Python爬虫获取商品销量数据,轻松掌握市场动态

为什么选择Python爬虫&#xff1f; 简洁易用&#xff1a;Python语言具有简洁的语法和丰富的库&#xff0c;使得编写爬虫变得简单高效。强大的库支持&#xff1a;Python拥有强大的爬虫框架&#xff08;如Scrapy、BeautifulSoup、Requests等&#xff09;&#xff0c;可以快速实现…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景

Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知&#xff0c;帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量&#xff0c;能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度&#xff0c;还为机器人、医疗设备和制造业的智…...

消息队列系统设计与实践全解析

文章目录 &#x1f680; 消息队列系统设计与实践全解析&#x1f50d; 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡&#x1f4a1; 权衡决策框架 1.3 运维复杂度评估&#x1f527; 运维成本降低策略 &#x1f3d7;️ 二、典型架构设计2.1 分布式事务最终一致…...

JDK 17 序列化是怎么回事

如何序列化&#xff1f;其实很简单&#xff0c;就是根据每个类型&#xff0c;用工厂类调用。逐个完成。 没什么漂亮的代码&#xff0c;只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...