|  |  |  |  |  |  | 
					            
						            
							            
								            |  | 
	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!kifastsystemcallretntdll!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内核调试 » 请问函数kifastsystemcallret的作用 |  |  
 |  |  |  |