Windows中系统调用的流程
2010-09-29 15:31
295 查看
Windows中系统调用的流程
潘爱民,2010.9.24
在《Windows内核原理与实现》一书,我曾经详细地解析了Windows应用程序发出的系统调用,经过ntdll.dll中的stub函数,再通过sysenter/syscall或int 2eh指令,调用到内核的完整过程。图8.5中有一个错误(感谢读者liucy指出这一错误),正确的图应该如下所示。
图中红色文字是改正之后的函数名称。这里实际上把通过sysenter或int 2eh两种情形的系统调用流程画在一起,所以显得较为复杂。如果拆开来,画成两个图,可能会更加容易理解。下面是按照sysenter/sysexit指令的系统调用流程:
而按照int 2eh来进入内核的流程更加简单一些:
无论是哪一种情形,对于ntdll.dll中的NtCreateFile或ntoskrnl.exe中的NtCreateFile函数,它们无 须关心系统调用是怎样发生的。
关于这两种情形下系统调用的详细穿透过程,请参考这本书的8.1.2节,这里不再进一步介绍。最后看一个系统调用栈:
f5484c94 808e3375 nt!IopCreateFile
f5484cf0 808e50ec nt!IoCreateFile
f5484d30 80882a2c nt!NtCreateFile
007deed8 7c8211f4 ntdll!KiFastSystemCallRet
007deedc 76cf2707 ntdll!ZwCreateFile+0xc
007def54 76cf276b iphlpapi!OpenTCPDriver+0xad
007def64 76cf278f iphlpapi!CheckTcpipState+0x62
007def98 76cf299a iphlpapi!GetIpStatsFromStack+0xd
007df00c 76cf32de iphlpapi!GetInterfaceInfo+0x38
007df028 76cf3230 iphlpapi!GetAdapterNameToIndexInfo+0x1e
007df060 76cf6a6b iphlpapi!GetAdapterInfo+0x18
007df0b4 4e7fdf36 iphlpapi!GetAdapterInfoEx+0x1c
007df504 4e7fe2f9 WINHTTP!CIpConfig::GetAdapterListOnNT5+0x6e
007dfac4 4e7fe938 WINHTTP!CIpConfig::GetAdapterList+0x58
...
注意,这里ntdll!ZwCreateFile的符号地址等同于ntdll!NtCreateFile。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/panaimin/archive/2010/09/24/5903432.aspx
潘爱民,2010.9.24
在《Windows内核原理与实现》一书,我曾经详细地解析了Windows应用程序发出的系统调用,经过ntdll.dll中的stub函数,再通过sysenter/syscall或int 2eh指令,调用到内核的完整过程。图8.5中有一个错误(感谢读者liucy指出这一错误),正确的图应该如下所示。
图中红色文字是改正之后的函数名称。这里实际上把通过sysenter或int 2eh两种情形的系统调用流程画在一起,所以显得较为复杂。如果拆开来,画成两个图,可能会更加容易理解。下面是按照sysenter/sysexit指令的系统调用流程:
而按照int 2eh来进入内核的流程更加简单一些:
无论是哪一种情形,对于ntdll.dll中的NtCreateFile或ntoskrnl.exe中的NtCreateFile函数,它们无 须关心系统调用是怎样发生的。
关于这两种情形下系统调用的详细穿透过程,请参考这本书的8.1.2节,这里不再进一步介绍。最后看一个系统调用栈:
f5484c94 808e3375 nt!IopCreateFile
f5484cf0 808e50ec nt!IoCreateFile
f5484d30 80882a2c nt!NtCreateFile
007deed8 7c8211f4 ntdll!KiFastSystemCallRet
007deedc 76cf2707 ntdll!ZwCreateFile+0xc
007def54 76cf276b iphlpapi!OpenTCPDriver+0xad
007def64 76cf278f iphlpapi!CheckTcpipState+0x62
007def98 76cf299a iphlpapi!GetIpStatsFromStack+0xd
007df00c 76cf32de iphlpapi!GetInterfaceInfo+0x38
007df028 76cf3230 iphlpapi!GetAdapterNameToIndexInfo+0x1e
007df060 76cf6a6b iphlpapi!GetAdapterInfo+0x18
007df0b4 4e7fdf36 iphlpapi!GetAdapterInfoEx+0x1c
007df504 4e7fe2f9 WINHTTP!CIpConfig::GetAdapterListOnNT5+0x6e
007dfac4 4e7fe938 WINHTTP!CIpConfig::GetAdapterList+0x58
...
注意,这里ntdll!ZwCreateFile的符号地址等同于ntdll!NtCreateFile。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/panaimin/archive/2010/09/24/5903432.aspx
相关文章推荐
- Windows中系统调用的流程
- Windows中系统调用的流程
- 系统调用流程---Windows
- Windows和UNIX系统调用的一些区别
- windows 系统调用.WinAPI.直接绘制屏幕的应用.实列.CS屏幕中心点作弊器(1.6匪徒连狙专用)
- 剖析Windows系统服务调用机制
- 看程序系统调用流程-strace使用
- Gloomy对Windows内核的分析(系统调用接口)
- Windows系统调用架构分析—也谈KiFastCallEntry函数地址的获取
- Android系统框架和几种调用流程
- linux设备驱动模型一字符设备open系统调用流程
- windows系统调用 临界区机制
- Windows 64位系统下32位进程调用64位进程中的函数
- windows下调用系统API实现进程创建和文件读写
- WINDOWS系统调用
- read()系统调用的流程-图比较多
- 如何在windows系统的cmd命令行下调用VS编译器
- 让Windows系统自动调用保存在U盘中的收藏夹内容
- windows下C语言调用系统文件选择对话框
- 剖析Windows系统服务调用机制