zw函数和nt函数的区别
内核解惑: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函数的区别相关推荐
- 内核解惑:zw函数和nt函数的区别
转载自:http://hi.baidu.com/resoft007/item/eb510a0d0ae2ac03addc7019 http://bbs.pediy.com/showthread.php? ...
- Zw函数与Nt函数的分别与联系
in ring3: lkd> ? ntdll!ZwOpenProcess Evaluate expression: 2089999739 = 7c92dd7b lkd> ?ntdll!Nt ...
- render函数和redirect函数的区别+反向解析
render函数和redirect函数的区别+反向解析 1.视图函数:一定是要包含两个对象的(render源码里面有HttpResponse对象) request对象:----->所有的请求 ...
- 一种注册表沙箱的思路、实现——Hook Nt函数
Nt函数是在Ring3层最底层的函数了,选择此类函数进行Hook,是为了提高绕过门槛.我的Hook方案使用的是微软的Detours.(转载请指明出处) Detours的Hook和反Hook的写入如下: ...
- 友元函数、类的非静态成员函数、静态成员函数的区别
类中申明的函数相对于类来说有三层意思: 1.有this指针 2.函数在类的作用区域中 3.可以访问类中私有部分 4.可以被继承 非静态成员函数具有1234 静态成员函数具有234 友元函数具有3 静态 ...
- Python初探——sklearn库中数据预处理函数fit_transform()和transform()的区别
敲<Python机器学习及实践>上的code的时候,对于数据预处理中涉及到的fit_transform()函数和transform()函数之间的区别很模糊,查阅了很多资料,这里整理一下: ...
- 第七周项目一-成员函数、友元函数和一般函数有区别(1)
/**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年4月12日*版 本 号: ...
- js函数声明和函数表达式的区别
Javascript Function无处不在,而且功能强大!通过Javascript函数可以让JS具有面向对象的一些特征,实现封装.继承等,也可以让代码得到复用.但事物都有两面性,Javascrip ...
- python中remove函数是什么意思,python中pop函数和remove函数有什么区别
python中pop函数和remove函数有什么区别 发布时间:2020-12-10 09:36:18 来源:亿速云 阅读:80 作者:小新 小编给大家分享一下python中pop函数和remove函 ...
最新文章
- php datatype=quot;requirequot;,我的问题谁能帮我解决一下??
- 11、HTML <head>标签
- HTML 元素居中的方法
- Android系统移植与驱动开发概述
- [BUUCTF-pwn]——picoctf_2018_rop chain
- [html] 举例说明写一个button的按钮的方法有哪些?
- python plot map_使用matplotlibbasemap在边界打印
- C++标准转换运算符:static_cast
- UltraEdit 21 for Mac(高级文本编辑器)
- JM8.6之参考图像管理
- C中使用汇编交换两个值
- C语言课程设计:课程管理系统
- crontab 每天凌晨12点定时器_每天爆卖10000只生蚝!西安这家烧烤界扛把子,吃到凌晨2点都不尽兴!...
- vue中用cdn引入优化vender.js大小,和cdn 引入mint-ui的问题
- Android平台开发-Android keypad map-Android按键事件
- 冬青看世界:“银河战舰“它叕来了,鲤鱼又将跃龙门?
- win10系统下,数据库密码忘记
- Java课程设计-日历记事本
- 十秒钟入门一分钟搭建Discuz论坛
- Raspberry PI 编译WLan驱动模块, 并配置登录WIFI
热门文章
- html文章font-family字体集合
- 用python读取股票价格_我用Python分析股票价格走势,学以致用获取第一桶金!
- 自建latex服务器,快速部署支持 Makedown 和 LaTeX 等格式的 Zbox-Wiki 文档共享站点
- 阿里游戏市场分析师模拟题
- 翻译自凯文凯利的Ted演讲—人工智能如何引发第二次工业革命
- 二维码跳转android或ios下载app中转处理
- 自制hdmi线一头改vga图_佛山HDMI接口批发报价
- 批量将文件中汉字数字替换为阿拉伯数字
- Ncurses学习经历(五)窗口机制详述
- python将英文字母排序_20191106-基于Python的对字母基数排序