|
|
|
|
|
|
|
Windows内核调试
帖子发起人: merry 发起时间: 2009-06-03 22:08 下午 回复: 5
|
帖子排序:
|
|
|
|
2009-06-03, 22:08 下午
|
merry
注册: 2008-09-26
发 贴: 61
|
请问函数kifastsystemcallret的作用
|
|
|
|
系统调用过函数kifastsystemcall后,在栈中会看到函数kifastsystemcallret,我原以为这个函数应包含sysexit指令,没想到却是ret指令。
lkd> u ntdll!kifastsystemcallret ntdll!KiFastSystemCallRet: 7c92eb94 c3 ret
Q:请问这是什么原因?谢谢!
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2009-06-03, 22:19 下午
|
格蠹老雷
注册: 2005-12-19
发 贴: 1,303
|
Re: 请问函数kifastsystemcallret的作用
|
|
|
|
这是从内核态回到用户态的着陆点,此时已经回到了用户态,ret是回到用户态的父函数。
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2009-06-03, 23:18 下午
|
merry
注册: 2008-09-26
发 贴: 61
|
Re: 请问函数kifastsystemcallret的作用
|
|
|
|
Quote: ret是回到用户态的父函数
ret应该是回到用户态ntdll导出的函数, 对吗?
另外,请问指令sysexit是由什么函数调用?
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2009-06-04, 00:09 上午
|
Thomson
注册: 2008-07-03
发 贴: 211
|
Re: 请问函数kifastsystemcallret的作用
|
|
|
|
ntdll!kifastsystemcallret只是一个ntdll里面的一个symbol,这个symbol指向了ntdll!kifastsystemcall这个function的最后一条指令(ret)吧.它和ntdll!kifastsystemcall+offset是等价的.
sysexit是在kernel里面退出system call的时候调用,相当于原来的iret.
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2009-06-07, 18:12 下午
|
merry
注册: 2008-09-26
发 贴: 61
|
Re: 请问函数kifastsystemcallret的作用
|
|
|
|
可以看出指令sysenter是由系统的KiFastSystemCall函数的调用的, ntdll!KiFastSystemCall: 7c92eb8b 8bd4 mov edx,esp 7c92eb8d 0f34 sysenter
Q:指令sysexit是由系统的什么函数调用的?
ps.我试着在反汇编native api函数,但没有看到这个指令被调用。
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2009-06-07, 21:21 下午
|
格蠹老雷
注册: 2005-12-19
发 贴: 1,303
|
Re: 请问函数kifastsystemcallret的作用
|
|
|
|
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
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
高端调试 » 软件调试 » Windows内核调试 » Re: 请问函数kifastsystemcallret的作用
|
|
|
|
|
|