内核解惑:zw函数和nt函数的区别

lkd> u ZwOpenProcess
nt!ZwOpenProcess:
804de044 b87a000000 mov eax,7Ah
804de049 8d542404 lea edx,[esp+4]
804de04d 9c pushfd
804de04e 6a08 push 8
804de050 e8dc150000 call nt!KiSystemService (804df631)
804de055 c21000 ret 10h
lkd> u NtOpenProcess
nt!NtOpenProcess:
80573d06 68c4000000 push 0C4h
80573d0b 6810b44e80 push offset nt!ObWatchHandles+0x25c (804eb410)
80573d10 e826f7f6ff call nt!_SEH_prolog (804e343b)
80573d15 33f6 xor esi,esi
80573d17 8975d4 mov dword ptr [ebp-2Ch],esi
80573d1a 33c0 xor eax,eax
80573d1c 8d7dd8 lea edi,[ebp-28h]
80573d1f ab stos dword ptr es:[edi]

这是看雪上某人反的两个函数。

从用户模式调用Nt和Zw API,如NtReadFile和ZwReadFile,二者没有任何区别,通过设置系统服务表中的索引和在堆栈中设置参数,经由SYSENTER指令进入内核态(而不是象w2k中通过int 0x2e中断),并最终由KiSystemService跳转到KiServiceTable对应的系统服务例程中。由于是从用户模式进入内核模式,因此代码会严格检查用户空间传入的参数。

从内核模式调用Nt和Zw API,连接nooskrnl.lib:
Nt系列API将直接调用对应的函数代码,而Zw系列API则通过KiSystemService,最终跳转到对应的函数代码。

重要的是两种不同的调用对内核中previous mode的改变,如果是从用户模式调用Native API则previous mode是用户态,如果从内核模式调用Native API则previous mode是内核态。previous为用户态时Native API将对传递的参数进行严格的检查,而为内核态时则不会。
调用Nt API时不会改变previous mode的状态,调用Zw API时会将previous mode改为内核态,因此在进行Kernel Mode Driver开发时可以使用Zw系列API可以避免额外的参数列表检查,提高效率。

zw函数和nt函数的区别相关推荐

  1. 内核解惑:zw函数和nt函数的区别

    转载自:http://hi.baidu.com/resoft007/item/eb510a0d0ae2ac03addc7019 http://bbs.pediy.com/showthread.php? ...

  2. Zw函数与Nt函数的分别与联系

    in ring3: lkd> ? ntdll!ZwOpenProcess Evaluate expression: 2089999739 = 7c92dd7b lkd> ?ntdll!Nt ...

  3. render函数和redirect函数的区别+反向解析

    render函数和redirect函数的区别+反向解析 1.视图函数:一定是要包含两个对象的(render源码里面有HttpResponse对象)   request对象:----->所有的请求 ...

  4. 一种注册表沙箱的思路、实现——Hook Nt函数

    Nt函数是在Ring3层最底层的函数了,选择此类函数进行Hook,是为了提高绕过门槛.我的Hook方案使用的是微软的Detours.(转载请指明出处) Detours的Hook和反Hook的写入如下: ...

  5. 友元函数、类的非静态成员函数、静态成员函数的区别

    类中申明的函数相对于类来说有三层意思: 1.有this指针 2.函数在类的作用区域中 3.可以访问类中私有部分 4.可以被继承 非静态成员函数具有1234 静态成员函数具有234 友元函数具有3 静态 ...

  6. Python初探——sklearn库中数据预处理函数fit_transform()和transform()的区别

    敲<Python机器学习及实践>上的code的时候,对于数据预处理中涉及到的fit_transform()函数和transform()函数之间的区别很模糊,查阅了很多资料,这里整理一下: ...

  7. 第七周项目一-成员函数、友元函数和一般函数有区别(1)

     /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年4月12日*版 本 号: ...

  8. js函数声明和函数表达式的区别

    Javascript Function无处不在,而且功能强大!通过Javascript函数可以让JS具有面向对象的一些特征,实现封装.继承等,也可以让代码得到复用.但事物都有两面性,Javascrip ...

  9. python中remove函数是什么意思,python中pop函数和remove函数有什么区别

    python中pop函数和remove函数有什么区别 发布时间:2020-12-10 09:36:18 来源:亿速云 阅读:80 作者:小新 小编给大家分享一下python中pop函数和remove函 ...

最新文章

  1. php datatype=quot;requirequot;,我的问题谁能帮我解决一下??
  2. 11、HTML <head>标签
  3. HTML 元素居中的方法
  4. Android系统移植与驱动开发概述
  5. [BUUCTF-pwn]——picoctf_2018_rop chain
  6. [html] 举例说明写一个button的按钮的方法有哪些?
  7. python plot map_使用matplotlibbasemap在边界打印
  8. C++标准转换运算符:static_cast
  9. UltraEdit 21 for Mac(高级文本编辑器)
  10. JM8.6之参考图像管理
  11. C中使用汇编交换两个值
  12. C语言课程设计:课程管理系统
  13. crontab 每天凌晨12点定时器_每天爆卖10000只生蚝!西安这家烧烤界扛把子,吃到凌晨2点都不尽兴!...
  14. vue中用cdn引入优化vender.js大小,和cdn 引入mint-ui的问题
  15. Android平台开发-Android keypad map-Android按键事件
  16. 冬青看世界:“银河战舰“它叕来了,鲤鱼又将跃龙门?
  17. win10系统下,数据库密码忘记
  18. Java课程设计-日历记事本
  19. 十秒钟入门一分钟搭建Discuz论坛
  20. Raspberry PI 编译WLan驱动模块, 并配置登录WIFI

热门文章

  1. html文章font-family字体集合
  2. 用python读取股票价格_我用Python分析股票价格走势,学以致用获取第一桶金!
  3. 自建latex服务器,快速部署支持 Makedown 和 LaTeX 等格式的 Zbox-Wiki 文档共享站点
  4. 阿里游戏市场分析师模拟题
  5. 翻译自凯文凯利的Ted演讲—人工智能如何引发第二次工业革命
  6. 二维码跳转android或ios下载app中转处理
  7. 自制hdmi线一头改vga图_佛山HDMI接口批发报价
  8. 批量将文件中汉字数字替换为阿拉伯数字
  9. Ncurses学习经历(五)窗口机制详述
  10. python将英文字母排序_20191106-基于Python的对字母基数排序