常有人搞不清这两组函数的关系,因为调用接口和实现功能一样,有些人就认为他们是同一个函数的不同名称。实际上他们是有区别的,借助windbg这个工具,我们就可以一探究竟。

在ring3层,这两组函数确实是同一个函数,用u命令对NtReadFile以及ZwReadFile反汇编发现,他们的起始地址是一样的。调用ntdll.dll这个动态库的函数时,声明成这两种形式都可以,不过按照微软的说法,声明成Nt函数更恰当些,Zw开头的函数表示的是内核函数。熟悉ntdll.dll这个动态库的人都知道,其实这个库里面的函数都是stub函数,并不做实际功能,只是系统调用进入内核的入口。

到了ring0层情况就不同了,两种形式的函数是不同的函数,Nt开头的函数是真正执行功能的函数。应用层所用的系统API都会通过int 2e或者sysenter指令切换到内核,然后调用内核导出的Nt系列函数。分析SSDT表即可以得出这个结论。

而对于内核态的Zw开头的函数,通过汇编也可以发现,它的结构与ntdll.dll里面的函数类似,最后都会调用对应的内核nt函数,只不过已经在内核态,就没有int 2e这种切换状态的指令,也没有陷阱帧,但调用形式差不多,都是通过调用号来从SSDT中找到实现功能的Nt函数。微软建议内核开发者使用Zw系列的函数,因为这些函数多了一些参数检查的代码。

Nt系列函数与Zw系列函数的关系相关推荐

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

    ntdll.dll和ntoskrnl.exe的Nt和Zw系列函数区别 in ring3: lkd> ? ntdll!ZwOpenProcess Evaluate expression: 2089 ...

  2. 本地系统服务例程:Nt和Zw系列函数

    Windows本地操作系统服务API由一系列以Nt或Zw为前缀的函数实现的,这些函数以内核模式运行,内核驱动可以直接调用这些函数,而用户层程序只能通过系统进行调用.通常情况下用户层应用程序不会直接调用 ...

  3. [转]OllyDBG 入门系列(三)-函数参考

    标 题: [原创]OllyDBG 入门系列(三)-函数参考 作 者: CCDebuger 时 间: 2006-02-14,23:34 链 接: http://bbs.pediy.com/showthr ...

  4. 十分钟成为 Contributor 系列 | 为 TiDB 重构 built-in 函数

    2019独角兽企业重金招聘Python工程师标准>>> 这是十分钟成为 TiDB Contributor 系列的第二篇文章,让大家可以无门槛参与大型开源项目,感谢社区为 TiDB 带 ...

  5. JavaScript进阶系列01,函数的声明,函数参数,函数闭包

    本篇主要体验JavaScript函数的声明.函数参数以及函数闭包. □ 函数的声明 ※ 声明全局函数 通常这样声明函数: function doSth() { alert("可以在任何时候调 ...

  6. [译]Effective Kotlin系列之探索高阶函数中inline修饰符(三)

    简述: 不知道是否有小伙伴还记得我们之前的Effective Kotlin翻译系列,之前一直忙于赶时髦研究Kotlin 1.3中的新特性.把此系列耽搁了,赶完时髦了还是得踏实探究本质和基础,从今天开始 ...

  7. openresty开发系列14--lua基础语法3函数

    openresty开发系列14--lua基础语法3函数 一)function (函数) 有名函数: optional_function_scope function function_name( ar ...

  8. vue函数如何调用其他函数?_好程序员Python教程系列之递归函数与匿名函数调用...

    好程序员Python教程系列递归函数与匿名函数调用,函数是Python技术学习中重要的一个环节,深入掌握该阶段的知识内容,对于Python技术能力的提升非常有帮助,这里就针对递归函数与匿名函数两种函数 ...

  9. 深入理解javascript函数进阶系列第一篇——高阶函数

    前面的话 前面的函数系列中介绍了函数的基础用法.从本文开始,将介绍javascript函数进阶系列,本文将详细介绍高阶函数 定义 高阶函数(higher-order function)指操作函数的函数 ...

最新文章

  1. 符号执行:利用Angr进行简单CTF逆向分析
  2. Android Telephony分析(二) ---- RegistrantList详解
  3. 解决‘C:\Program‘ 不是内部或外部命令,也不是可运行的程序或批处理文件
  4. (网页)JS编程中,有时需要在一个方法返回两个个或两个以上的数据
  5. flask 安装flask_resultful
  6. math.atan_Python中带有示例的math.atan()方法
  7. 送书 | 师妹越多,团队集体智慧越高,当占比80%时,达到巅峰
  8. 公开课|智能文本信息抽取算法的进阶与应用
  9. xp配置iis和php,XP下让IIS支持PHP
  10. 利用EXCEL对数据进行比对,以及提取有效数据
  11. java cmyk和rgb的转换_CMYK与RGB相互转换(java)
  12. python判断邮箱格式是否正确_python:校验邮箱格式
  13. 参加第2届全国高校大数据教学研讨会总结
  14. VeryCD新建2组中国eMule服务器
  15. Padavan各源码融合教程
  16. 攻防世界入门 web 十二题
  17. 《从0到1 开启商业与未来的秘密》阅读心得
  18. 计算机组成原理---指令系统
  19. 圈圈教你玩USB学习总结
  20. error C2143/C2501/C2059/C2238

热门文章

  1. 毫安时,毫瓦时的含义
  2. iOS开发 System Sound Services(振动和提示音)
  3. 《引爆用户增长》学习笔记
  4. ――给中国青年学生的第三封信
  5. 华为机试C语言-组成最大数
  6. mysql 巡检日志模板_数据库巡检模版
  7. 项目管理关键路径法解析
  8. SkeyeVSS构筑公交车载智能视频监控系统:公交运行的网络安全墙
  9. 【WebLogic】Windows系统下WebLogic 12.1.3.0的安装和补丁
  10. 渥太华大学计算机科学COOP,加拿大渥太华大学热门专业【生物工程计算机科学】】申请要求...