论ntoskrnl.exe中的导出函数、非导出函数、公开函数、非公开函数
来源:互联网 发布:英语小说阅读软件 编辑:程序博客网 时间:2024/06/05 08:10
ntoskrnl.exe中定义的函数
导出函数:在ntoskrnl.exe导出表(EAT)里面出现的函数。导出函数的主要目的是供外部调用。
如果想知道ntoskrnl.exe是否导出了某个Zw*或Nt*函数,可以借用depends工具,或LoadPE之类的工具进行查看。
非导出函数:ntoskrnl.exe定义的函数中,除去导出的函数,剩余的即是未导出函数。此类函数仅供自己内部调用。一般情况下,开发者(如,MS)并不想让外部知道自己内部的具体实现细节,常常会将此种函数封装成接口,再供外部使用。
公开(文档化)函数:如,ntoskrnl.exe导出的函数中能在MSDN上找到的。此类函数拥有具体的函数原型、详细的参数说明和注意事项。
非公开(未文档化)函数:如,ntoskrnl.exe导出的函数中在MSDN上无法找到的。此类函数往往没有函数原型和详细的使用说明。微软经常会把一些参数可能会随时变化的函数,或者功能有点强大的,或不和谐的函数隐藏起来。
因此,ntoskrnl.exe中定义的函数,可以大致分为两类:导出函数和非导出函数。导出的函数又可以分为两类:公开(文档化)函数和非公开(未文档化)函数。而非导出函数则只能是非公开函数。同理,公开的函数肯定是导出函数,而非公开的函数则可以是导出函数,也可以是非导出函数。
如,ZwQueryInformationProcess函数在ntoskrnl.exe的EAT中能够找到,说明它是一个导出函数,但在MSDN上无法找到,说明它是一个未公开的函数,因此,ZwQueryInformationProcess是一个未公开的导出函数。
如,ZwProtectVirtualMemory函数在WRK中能找到,说明它是在ntoskrnl.exe中定义的(因为WRK是ntoskrnl.exe的部分实现),而在ntoskrnl.exe的EAT中无法找到,则说明它是一个未导出函数,同时在MSDN上无法找到,还说明它是一个未公开的函数(未导出的肯定是未公开的),因此,ZwProtectVirtualMemory是一个未公开的未导出函数,即未导出函数。
注意:在本地MSDN上找不到的函数,不一定是未文档化的函数,可能是本地MSDN版本过低。判断是否是公开的函数,最好到在线MSDN上查找。
补充:
未公开的导出函数,是不能直接使用的。
未文档化的导出函数,其使用方法如下:
1、在驱动层,在使用之前给出函数声明,即重新声明一下,就可使用了。
2、在驱动层,利用其函数原型定义函数指针,使用MmGetSystemRoutineAddress+函数名去获取函数的地址
2、在应用层,利用其函数原型定义函数指针,使用LoadLibrary和GetProcessAddress获取函数的地址
应用层调用未公开的API实例:
http://blog.titilima.com/show-29-1.html
未导出函数的使用方法:
未导出函数的使用比较麻烦,一般要先获取那个函数所在模块的基地址,然后再通过特征码去得到函数地址。
具体实例,可参考以下连接:
实例一:
http://blog.csdn.net/evi10r/article/details/6952277
实例二:
http://www.cnblogs.com/gussing/archive/2009/08/18/1548869.html
参考文献:
http://blog.csdn.net/jjjyu123/article/details/13616277
- 论ntoskrnl.exe中的导出函数、非导出函数、公开函数、非公开函数
- 导出函数,非导出函数,公开函数,非公开函数
- Windows非公开API函数的调用办法
- 让EXE导出函数
- 网络函数大公开
- 未公开函数
- React OS 中的 Kernel32.dll & Ntdll.dll & ntoskrnl 所导出的函数
- 给EXE文件导出函数
- 浅谈Windows CE中的未公开函数
- 非MFC DLL的函数,类的导出与调用
- API未公开函数2
- API未公开函数3
- 未公开的函数 NtQuerySystemInformation
- 未公开的加密函数
- 公开的函数把函数作为参数
- 改造PE中的函数为导出函数
- EXE导出函数及def文件格式说明
- Rundll32.exe 调用DLL自定义导出函数
- liunx mysql 安装
- Windows线程同步的方法
- 日历之完美版-添加了输入框
- java常用设计模式
- [转载]基于效率考虑,对Windows多线程同步机制的选择,分析与实测
- 论ntoskrnl.exe中的导出函数、非导出函数、公开函数、非公开函数
- Java网页解析
- ChangeEnvironmentTool 总结
- 黑马程序员-java设计模式之单例模式
- 数据库连接池
- ArrayAdapter requires the resource ID to be a TextView 的解决办法
- Broken Keyboard (a.k.a. Beiju Text)
- 怎么在地址栏显示公司的logo
- 读写锁的特性