请问函数kifastsystemcallret的作用

Windows内核调试

请问函数kifastsystemcallret的作用


merry 2009-06-03, 22:08 下午

系统调用过函数kifastsystemcall后,在栈中会看到函数kifastsystemcallret,我原以为这个函数应包含sysexit指令,没想到却是ret指令。

lkd> u ntdll!kifastsystemcallret
ntdll!KiFastSystemCallRet:
7c92eb94 c3              ret

Q:请问这是什么原因?谢谢!

Re: 请问函数kifastsystemcallret的作用


格蠹老雷 2009-06-03, 22:19 下午
这是从内核态回到用户态的着陆点,此时已经回到了用户态,ret是回到用户态的父函数。

Re: 请问函数kifastsystemcallret的作用


merry 2009-06-03, 23:18 下午

Quote:  ret是回到用户态的父函数

 ret应该是回到用户态ntdll导出的函数, 对吗?

另外,请问指令sysexit是由什么函数调用?

Re: 请问函数kifastsystemcallret的作用


Thomson 2009-06-04, 00:09 上午
ntdll!kifastsystemcallret只是一个ntdll里面的一个symbol,这个symbol指向了ntdll!kifastsystemcall这个function的最后一条指令(ret)吧.它和ntdll!kifastsystemcall+offset是等价的.

sysexit是在kernel里面退出system call的时候调用,相当于原来的iret.

Re: 请问函数kifastsystemcallret的作用


merry 2009-06-07, 18:12 下午

 可以看出指令sysenter是由系统的KiFastSystemCall函数的调用的,
ntdll!KiFastSystemCall:
7c92eb8b 8bd4            mov     edx,esp
7c92eb8d 0f34            sysenter

Q:指令sysexit是由系统的什么函数调用的?

 ps.我试着在反汇编native api函数,但没有看到这个指令被调用。

Re: 请问函数kifastsystemcallret的作用


格蠹老雷 2009-06-07, 21:21 下午
lkd> u nt!KiSystemCallExit2 l9
nt!KiSystemCallExit2:
8053cccd f644240901 test byte ptr [esp+9],1
8053ccd2 75f8 jne nt!KiSystemCallExit (8053cccc)
8053ccd4 5a pop edx
8053ccd5 83c404 add esp,4
8053ccd8 80642401fd and byte ptr [esp+1],0FDh
8053ccdd 9d popfd
8053ccde 59 pop ecx
8053ccdf fb sti
8053cce0 0f35 sysexit

Powered by Community Server Powered by CnForums.Net