原文

窗口上的系统调用通过,每个由系统调用(x64)或sysenter(x86)CPU指令调用的NTDLL.dll,如NTDLLNtCreateFile的以下输出所示:
这里

0:000> u
ntdll!NtCreateFile:
00007ffc`c07fcb50 4c8bd1          mov     r10,rcx
00007ffc`c07fcb53 b855000000      mov     eax,55h
00007ffc`c07fcb58 f604250803fe7f01 test    byte ptr [SharedUserData+0x308 (00000000`7ffe0308)],1
00007ffc`c07fcb60 7503            jne     ntdll!NtCreateFile+0x15 (00007ffc`c07fcb65)
00007ffc`c07fcb62 0f05            syscall
00007ffc`c07fcb64 c3              ret
00007ffc`c07fcb65 cd2e            int     2Eh
00007ffc`c07fcb67 c3              ret

EAX的值是系统服务编号(在本例中为0x55).接着是系统调用指令(测试的条件一般没有分支).

系统调用(syscall)导致内核传输到负责分发到执行器中的实际系统调用实现系统服务分发器例程.最终,必须将EAX寄存器作为,每个系统服务编号(索引)都指向实际例程系统服务分发表(SSDT)的查找索引.

x64版本的窗口上,SSDT在内核调试器中的nt!KiServiceTable符号中:

lkd> dd nt!KiServiceTable
fffff804`13c3ec20  fced7204 fcf77b00 02b94a02 04747400
fffff804`13c3ec30  01cef300 fda01f00 01c06005 01c3b506
fffff804`13c3ec40  02218b05 0289df01 028bd600 01a98d00
fffff804`13c3ec50  01e31b00 01c2a200 028b7200 01cca500
fffff804`13c3ec60  02229b01 01bf9901 0296d100 01fea002

你可能期望SSDT中的值是,直接指向系统服务(这是x86系统上使用的方案)的64位指针.在x64上,这些值为32位,它们是SSDT自身开头的偏移.

但是,偏移不包括最后十六进制数字(4位):最后值系统调用的参数个数.

来看看这是否适合NtCreateFile.正如用户模式,它的服务编号是0x55的,因此要取得实际的偏移,需要简单计算:

kd> dd nt!KiServiceTable+55*4 L1
fffff804`13c3ed74  020b9207

现在,需要取(不带最后十六进制数字的)此偏移,在SSDT中添加它,它应该指向NtCreateFile:

lkd> u nt!KiServiceTable+020b920
nt!NtCreateFile:
fffff804`13e4a540 4881ec88000000  sub     rsp,88h
fffff804`13e4a547 33c0            xor     eax,eax
fffff804`13e4a549 4889442478      mov     qword ptr [rsp+78h],rax
fffff804`13e4a54e c744247020000000 mov     dword ptr [rsp+70h],20h

事实上,这是NtCreateFile.参数个数呢?存储的值7.下面是NtCreateFile的原型(在WDK中记录为ZwCreateFile):

NTSTATUS NtCreateFile(PHANDLE            FileHandle,ACCESS_MASK        DesiredAccess,POBJECT_ATTRIBUTES ObjectAttributes,PIO_STATUS_BLOCK   IoStatusBlock,PLARGE_INTEGER     AllocationSize,ULONG              FileAttributes,ULONG              ShareAccess,ULONG              CreateDisposition,ULONG              CreateOptions,PVOID              EaBuffer,ULONG              EaLength);

显然,有11个参数,而不仅是7个.为什么会有差异?存储的值使用栈传递的参数个数.在x64调用约定中,前4个参数使用寄存器传递:RCX,RDX,R8,R9(按此顺序).
现在回到文章标题.下面是SSDT中的前几个项:

lkd> dd nt!KiServiceTable
fffff804`13c3ec20  fced7204 fcf77b00 02b94a02 04747400
fffff804`13c3ec30  01cef300 fda01f00 01c06005 01c3b506

前两个项的数字要大得多.试对第一个值(索引0)应用相同逻辑:

kd> u nt!KiServiceTable+fced720
fffff804`2392c340 ??
???^ Memory access error in 'u nt!KiServiceTable+fced720'

(按二进制补码)该值实际上是一个负值,因此需要符号扩展64位,然后加起来(如前省略最后十六进制数字):

kd> u nt!KiServiceTable+ffffffff`ffced720
nt!NtAccessCheck:
fffff804`1392c340 4c8bdc          mov     r11,rsp
fffff804`1392c343 4883ec68        sub     rsp,68h
fffff804`1392c347 488b8424a8000000 mov     rax,qword ptr [rsp+0A8h]

这是NtAccessCheck.该函数的实现在比SSDT自身更低的地址中.来试用1索引执行相同练习:

kd> u nt!KiServiceTable+ffffffff`ffcf77b0
nt!NtWorkerFactoryWorkerReady:
fffff804`139363d0 4c8bdc          mov     r11,rsp
fffff804`139363d3 49895b08        mov     qword ptr [r11+8],rbx

现在得到1系统调用号:NtWorkerFactoryWorkerReady.
对那些喜欢WinDbg脚本的人,编写一个脚本来很好地显示所有系统调用函数及其索引.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/90548.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/90548.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/90548.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能冗余:大语言模型为何有时表现不佳(以及我们能做些什么)

像 GPT - 4 这样的大语言模型(LLMs)彻底改变了我们与技术交互的方式。它们可以撰写文章、生成代码、回答问题,甚至帮助我们构思创意。但任何花时间使用过这些模型的人都知道,它们的输出有时会让人感觉……不太对劲。表述冗长、格式…

Cursor替代品亚马逊出品Kiro下载

Cursor替代品亚马逊出品Kiro下载 支持Claude Sonnet4.0与3.7 点击下载 备用链接:https://pan.xunlei.com/s/VOW-nBmVgR3ewIIAm7jDsf99A1?pwd6bqu#

MySQL 事务管理

一、前言 CURD 不加控制,会有什么问题? CURD 满足什么属性,能解决上述问题? 买票的过程得是原子的。买票应该不能受互相的影响。买完票应该要永久有效。买前和买后都要是确定的状态。 什么是事务? 事务就是一组 DML 语…

yarn在macOS上的安装与镜像源配置:全方位指南

在前端开发领域,高效的包管理工具是提升开发效率的关键。yarn 作为一款由 Facebook 推出的包管理器,凭借其快速、可靠、安全的特性,逐渐成为众多开发者的首选。对于 macOS 用户而言,正确安装 yarn 并合理配置镜像源,能…

Qt 插件架构开发与应用

Qt的插件架构是其模块化和可扩展性的核心机制之一,它允许开发者通过动态加载插件(Plugins)扩展应用功能,而无需重新编译主程序。这种架构广泛应用于IDE(如Qt Creator)、媒体播放器(解码器扩展&a…

打破传统局限:FinOps云成本优化助力企业云成本管理升级

在云计算日益普及的当下,企业纷纷将业务迁移到云端,以期获得更高效、灵活的IT资源管理方式。然而,云成本管理问题也随之而来,高额的云支出、资源利用不充分、成本控制难等,成为企业云管理之路上的绊脚石。此时,奇墨科技FinOps云成本优化正以其独特的优势,助力企业打破传统局限,…

HDFS写性能优化技巧详解:从理论到实践

HDFS写性能优化概述在大数据处理的生态系统中,Hadoop分布式文件系统(HDFS)作为核心存储层,其写性能直接影响着整个数据处理管道的效率。随着数据规模的指数级增长,企业对HDFS写入吞吐量和延迟的要求日益严苛&#xff0…

基于AutoJawSegment项目的CBCT图像分割实践指南

基于AutoJawSegment项目的CBCT图像分割实践指南 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家,觉得好请收藏。点击跳转到网站。 1. 项目背景与概述 1.1 CBCT在口腔医学中的应用 锥形束计算机断层扫描(Cone Beam Computed Tomograph…

docker部署的ragflow服务迁移 数据卷迁移

[docker ragflow数据迁移]目录背景一、我的配置文件✅ 数据存储路径一览(基于你的配置文件)关于这些 volumes 的说明📁 如何查看这些卷在本地的具体位置?可能用到的docker 命令如下。📦 总结建议🛠️ 如果想…

Chrome插件学习笔记(三)

Chrome插件学习笔记(三) 参考文章: https://blog.csdn.net/guoqiankunmiss/article/details/135847091https://blog.csdn.net/guoqiankunmiss/article/details/135974364 1、项目搭建 在前两篇文章中使用的原生js去操作dom,很费劲…

Android系统中的4KB内存页简介

deepseek回答: Android系统中的4KB内存页是虚拟内存管理的最小单位,其主要用途如下: 一、核心功能 虚拟地址映射 应用程序访问内存时,系统将虚拟地址按4KB页框映射到物理内存或磁盘空间,实现进程间的内存隔离和安全访…

【Chrome】下载chromedriver的地址

下载chromedriver的地址低版本的最新版本的低版本的 http://chromedriver.storage.googleapis.com/index.html 最新版本的 https://googlechromelabs.github.io/chrome-for-testing/#stable

ISP算法——从颜色恒常性到白平衡

前面文章,介绍了人眼感知的物体颜色取决于光源的光谱组成与物体表面的光谱反射特性之间的相互作用。人类视觉的颜色感知是生物机制与认知智能协同作用的结果,人眼视网膜上的视锥细胞检测光的颜色,视杆细胞分析光的亮度,再共同转化…

工业缺陷检测的计算机视觉方法总结

工业缺陷检测的计算机视觉方法总结 传统方法 特征提取方式: 颜色:基于HSV/RGB空间分析,如颜色直方图、颜色矩等纹理:采用LBP、Haar、Gabor滤波器等算子提取纹理模式形状:基于Hu矩、Zernike矩等数学描述符刻画几何特性尺…

js实现宫格布局图片放大交互动画

可直接运行代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>五图交互布局</title><style>* {box-sizing: border-box;margin: 0;padding: 0;}.gallery {display: grid;grid-template-c…

easyexcel流式导出

EasyExcel 支持流式导出&#xff0c;这是它的一个重要特性。流式导出可以有效解决大数据量导出时的内存溢出问题。流式导出的优势内存友好 &#xff1a;不会一次性将所有数据加载到内存中适合大数据量 &#xff1a;可以处理百万级甚至更多的数据性能稳定 &#xff1a;内存占用相…

广州 VR 安全用电技术:工作原理、特性及优势探析​

&#xff08;一&#xff09;沉浸式学习体验​ 在广州&#xff0c;VR 用电安全培训技术给用电安全培训带来变革。借助头戴式显示设备等硬件&#xff0c;结合 3D 建模和实时渲染技术&#xff0c;打造广州特色用电场景。员工戴上 VR 设备进入虚拟电力场景&#xff0c;能看到电气设…

2.Linux 网络配置

Linux: 网络配置 版本为centos7 网卡配置文件&#xff1a; /etc/sysconfig/network-scripts/ifcfg-ens33 [rootkami /]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 TYPEEthernet /类型&#xff1a;以太网 PROXY_METHODnone BROWSER_ONLYno BOOTPROTOnone /网络配…

FPGA Verilog 入门语法指南

FPGA Verilog 入门语法指南 📋 目录 Verilog与C语言对比 基础关键字 数据类型 运算符 控制结构 数值表示 阻塞与非阻塞赋值 模块结构 预处理指令

【鸿蒙HarmonyOS Next App实战开发】视频提取音频

在多媒体处理场景中&#xff0c;经常需要从视频文件中提取纯净的音频轨道。本文将介绍如何在HarmonyOS应用中实现这一功能&#xff0c;核心代码基于ohos/mp4parser库的FFmpeg能力。 功能概述 我们实现了一个完整的视频音频提取页面&#xff0c;包含以下功能&#xff1a; 通过…