Zw*与Nt*的区别

<寒江独钓>Windows内核安全编程__传统键盘过滤程序 技术原理 1.预备知识 何为符号链接?符号链接其实就是设备的一个“别名”。在应用程序中想要访问设备一般要通过符号链接来完成,而不是设备名本身。 ZwCreateFile是很重要的函数。同名的函数有两个:一个在内核中(ntknos.exe),一个在应用层(ntdll.dll) 阅读详情
某些Zw*和Nt*函数既在ntdll.dll中导出又在ntoskrnl.exe中导出,他们有什么区别呢?
我们分三部分比较:
step 1: ntdll.dll中的Zw*和Nt*有什么区别?
step 2: ntoskrnl.exe中的Zw*和Nt*有什么区别?
step 3: ntdll.dll中的Zw*与ntoskrnl.exe中的Zw*有什么区别?
        ntdll.dll中的Nt*与ntoskrnl.exe中的Nt*有什么区别?
在下面的讨论中我们以ZwCreateFile和NtCreateFile为例

讨论前:我先贴点Kd给我们的答案
Part1:
kd> u Ntdll! ZwCreateFile L4
ntdll!ZwCreateFile:
77f87cac b820000000      mov    eax,0x20
77f87cb1 8d542404        lea    edx,[esp+0x4]
77f87cb5 cd2e            int    2e
77f87cb7 c22c00          ret    0x2c
kd> u Ntdll! NtCreateFile L4
ntdll!ZwCreateFile:
77f87cac b820000000      mov    eax,0x20
77f87cb1 8d542404        lea    edx,[esp+0x4]
77f87cb5 cd2e            int    2e
77f87cb7 c22c00          ret    0x2c

Part2:
kd> u Nt!ZwCreateFile L4
nt!ZwCreateFile:
8042fa70 b820000000      mov    eax,0x20
8042fa75 8d542404        lea    edx,[esp+0x4]
8042fa79 cd2e            int    2e
8042fa7b c22c00          ret    0x2c
kd> u Nt!NtCreateFile L14
nt!NtCreateFile:
804a7172 55              push    ebp
804a7173 8bec            mov    ebp,esp
804a7175 33c0            xor    eax,eax
804a7177 50              push    eax
804a7178 50              push    eax
804a7179 50              push    eax
804a717a ff7530          push    dword ptr [ebp+0x30]
804a717d ff752c          push    dword ptr [ebp+0x2c]
804a7180 ff7528          push    dword ptr [ebp+0x28]
804a7183 ff7524          push    dword ptr [ebp+0x24]
804a7186 ff7520          push    dword ptr [ebp+0x20]
804a7189 ff751c          push    dword ptr [ebp+0x1c]
804a718c ff7518          push    dword ptr [ebp+0x18]
804a718f ff7514          push    dword ptr [ebp+0x14]
804a7192 ff7510          push    dword ptr [ebp+0x10]
804a7195 ff750c          push    dword ptr [ebp+0xc]
804a7198 ff7508          push    dword ptr [ebp+0x8]
804a719b e8b284ffff      call    nt!IoCreateFile (8049f652)
804a71a0 5d              pop    ebp
804a71a1 c22c00          ret    0x2c



1) Part1 输出的是Ntdll.dll中ZwCreateFile和NtCreateFile的汇编代码,我们发现实现是一样的;
eax是中断号,edx是函数的参数起始地址([Esp]是返回地址);从而我可以大胆的说:Ntdll.dll中ZwCreateFile和NtCreateFile功能是一样的作用:都是调用int 2E中断;

IDA给我们的答案:
.text:77F87CAC ; Exported entry  92. NtCreateFile
.text:77F87CAC ; Exported entry 740. ZwCreateFile
.text:77F87CAC
.text:77F87CAC
.text:77F87CAC                public ZwCreateFile
.text:77F87CAC ZwCreateFile    proc near              ;
.text:77F87CAC
.text:77F87CAC arg_0          = dword ptr  4
.text:77F87CAC
.text:77F87CAC                mov    eax, 20h        ; NtCreateFile
.text:77F87CB1                lea    edx, [esp+arg_0]
.text:77F87CB5                int    2Eh            ; DOS 2+ internal - EXECUTE COMMAND
.text:77F87CB5                                        ; DS:SI -> counted CR-terminated command string
.text:77F87CB7                retn    2Ch
.text:77F87CB7 ZwCreateFile    endp

原来在ntdll中NtCreateFile只是ZwCreateFile的别名。



2) Part2 输出的是Ntoskrnl.exe中ZwCreateFile和NtCreateFile的汇编代码,也许令你很失望,汇编代码不一样; ZwCreateFile中eax是中断号,edx是函数的参数起始地址,然后调用int 2E中断; NtCreateFile只是把参数入栈去调用IoCreateFile;
他们的区别是:NtCreateFile是实现代码,而 ZwCreateFile仍通过中断来实现功能,2E软中断的20h子中断号的处理程序是NtCreateFile;这样一说他们是没区别了?错! NtCreateFile是在ring0下了,而ZwCreateFile是通过int 2E进入ring0的,而不论ZwCreateFile处于什么模式下。



3) 从而我们得出:
  ntdll.dll中ZwCreateFile与ntoskrnl.exe中ZwCreateFile的区别是:前者是user Mode application called,后者是Kernel Mode driver Called;
  ntdll.dll中NtCreateFile与ntoskrnl.exe中NtCreateFile区别是:前者在ring3下工作,后者在ring0下工作;前者通过中断实现,后者是前者的中断处理程序。 
Linux显卡管理避坑指南:为什么Xorg总是占用你的NVIDIA GPU? 本文深入解析了在Linux系统上,尤其是双显卡笔记本中,Xorg显示服务器进程占用NVIDIA GPU的根本原因。文章从Xorg的驱动加载机制和NVIDIA驱动的独占性入手,详细对比了禁用配置文件、手动配置xorg.conf、使用官方PRIME方案以及切换到Wayland等主流解决方案的优缺点与适用场景,旨在帮助用户有效释放GPU资源,确保深度学习、游戏等计算任务能独占显卡性能。 阅读详情

相关推荐

Ansys Lumerical FDTD硬件配置避坑指南:从RTX 4090到A100的GPU选择实战

本文针对Ansys Lumerical FDTD仿真计算,深入分析了从消费级RTX 4090到专业级A100的GPU硬件配置选择。文章指出,选择的关键在于显存容量能否容纳仿真模型,并对比了二者在显存、双精度算力及多卡扩展性上的核心差异,为不同预算和仿真规模的用户提供了实战避坑指南与配置建议。

weixin_29196891的博客 273

Windows驱动--创建日志文件

Windows驱动的日志创建、写入和读取操作。

TakakiTohno的博客 1135

生成对抗网络(GAN、DCGAN、ACGAN)-----学习笔记

生成对抗网络学习笔记 生成对抗网络有两个关键结构:生成模型、判别模型。 生成模型:输入是一个服从正态分布的N维向量,利用这个N维向量生成一张图片。 判别模型:对于生成模型输出的图像判别它是不是真的图像。 生成模型和判别模型的博弈关系在于:生成模型的目的是生成让判别模型无法判别真伪的图像,而判别模型的目的是判断输入图像的真伪。 结合代码来看生成对抗网络中,生成器和判别器的训练过程: 判别模型的训...

weixin_43227526的博客 5491

Windows内核--NtCreateFile和ZwCreateFile(3.)

NtCreateFile是实作创建文件,ZwCreateFile调用NT系统服务API完成。

编程语言开发、框架原理、编程思想、最佳实践技巧经验分享。致力于各种编程技术的技巧经验干货分享,讲解开发避坑技巧,追踪开发前沿技术,实战展开解决难题。 程序员小迷助您在编程路上越走越好! 872

别再让COGI拖慢你的SAP接口!手把手教你配置BAPI_PRODORDCONF_CREATE_TT的同步货物移动

本文深入解析SAP生产订单报工接口中的COGI问题,通过BAPI_PRODORDCONF_CREATE_TT的同步配置实战,解决异步更新导致的性能瓶颈。文章详细介绍了增强点配置和性能验证,帮助用户彻底消除COGI堆积,提升接口效率。

weixin_29214691的博客 482

YOLOv13改进策略【Head】| 引入RT-DETR中的RTDETRDecoder,替换检测头

本文记录的是基于RTDETRDecoder模块的YOLOv13目标检测改进方法研究。RT-DETR的模块通过,能为解码器提供高质量的初始,从而。相比v13原始的检测头,RT-DETR能,替换后能够更好的提高模型性能。

Limiiiing的博客 434

Nt*与Zw*的区别

今天在看Undocumented Windows 2000 Secrets的时候, 一段对于Nt*与Zw*的区别,看了很久,看得不是很明白,后来通过网上查阅,现在比较清楚了. 以下为原文: "一组与执行体的系统服务(executive's system services)平行的入口点.从内核模式的代码()中调用一个ZwXxx入口点将获得相应的系统服务...

weixin_30909575的博客 274

Python爬虫教程:抓取短视频平台数据(以抖音和快手为例)

为什么抓取短视频平台数据?内容分析:通过抓取短视频平台上的视频内容、标题、标签等数据,可以进行内容分类、趋势分析、话题分析等。情感分析:抓取视频的评论数据,并进行情感分析,帮助企业或组织了解公众的情绪反馈。用户行为分析市场监测:通过抓取特定关键词或标签下的视频数据,分析市场趋势,进行竞争对手分析。短视频平台数据类型:视频信息:包括视频标题、描述、标签、作者等。用户信息:包括用户的昵称、粉丝数、关注数等。互动数据评论数据:视频下的用户评论内容及用户信息。

2201_76125261的博客 3663

ntdll.dll和ntoskrnl.exe中的NT*和ZW*函数区别

转载自:http://blog.youkuaiyun.com/sysprogram/article/details/5805265 以NtOpenProcess和ZwOpenProcess为例,结合Windbg的lkd调试来说明 1、Q:ntdll.dll中的Nt*和Zw*区别? lkd> u ntdll!zwopenprocess l4 ntdll!ZwOpenProcess

收集学习过程中对自己有帮助的牛人文章 987

EtherCAT报文-BRD(广播读)抓包分析

EtherCAT报文之BRD(广播读)报文Wireshark抓包分析。

kevin1499的博客 1214

如何借助Gemini 3 Pro完成一篇文献精读?(劝收藏)

金句必须是原文的完整句子,并附上该句子在文中的大致位置。你是一名资深科研文献评估专家,请根据我提供的文献信息(标题、作者、期刊、时间、引用、摘要、结论、图表)依次输出:①影响力评估:按期刊、作者、时间、引用、问题重要性给出1–10分及简述;用上述方法再结合Gemini 3 Pro的辅助,原本需要3小时才能读完一篇文献,现在只需50分钟,不管是顶刊论文还是领域内冷门论文,都可以用这套方法,另外七哥设计的高阶精读提示词,需根据自己的文献内容做调整,希望这篇文章的方法能帮你高效精读文献,掌握文献的精华内容。

智能AI让学术科研更容易 1302

了解Zw*与Nt*的区别

某些Zw*和Nt*函数既在ntdll.dll中导出又在ntoskrnl.exe中导出,他们有什么区别呢? 我们分三部分比较: step 1: ntdll.dll中的Zw*和Nt*有什么区别? step 2: ntoskrnl.exe中的Zw*和Nt*有什么区别? step 3: ntdll.dll中的Zw*与ntoskrnl.exe中的Zw*有什么区别?         ntdll.d

天 下 2143

【DexGraspNet与多指手抓取算法详解】第四章 抓取检测网络架构设计

图 $G=(V, E)$ 包含两类节点:指尖节点 $V_{tip} = \{v_{tip}^i\}_{i=1}^{N_{finger}}$ 与物体表面节点 $V_{obj} = \{v_{obj}^j\}_{j=1}^{N_{surf}}$。节点特征包含位置 $x \in \mathbb{R}^3$ 、法向 $n \in \mathbb{R}^3$ 及视觉特征 $f \in \mathbb{R}^d$。

VectorShift的博客 441

ntoskrnl.exe中Zw*与Nt*的区别

某些Zw*和Nt*函数既在ntdll.dll中导出又在ntoskrnl.exe中导出,他们有什么区别呢? 我们分三部分比较: step 1: ntdll.dll中的Zw*和Nt*有什么区别? step 2: ntoskrnl.exe中的Zw*和Nt*有什么区别? step 3: ntdll.dll中的Zw*与ntoskrnl.exe中的Zw*有什么区别?          ntdll.d

shenjianxz的博客 974

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Nt*和Zw*系列函数的区别

ntdll.dll和ntoskrnl.exe的Nt和Zw系列函数区别 in ring3: lkd> ? ntdll!ZwOpenProcess Evaluate expression: 2089999739 = 7c92dd7b lkd> ?ntdll!NtOpenProcess Evaluate expression: 2089999739 = 7c92dd7b 可以看到,在nt

crystal0011的专栏 969

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Nt* 与 Zw* 区别

以ReadFile为例 ntdll.dll导出了ZwReadFile和NtReadFile 在用户态 不管你调用ZwReadFile还是NtReadFile都是一样的 因为他们是同一个函数的两个不同名称而已.... 而且他们最终都会调用到ntoskrnl中的NtReadFile中去 在内核态 ntoskrnl.exe导出了ZwReadFile和NtReadFil...

weixin_30701575的博客 238

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: Loading unsigned drivers on Vista
下一篇: 如何写windows系统已保护的内存区域
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值