|  |  |  |  |  |  | 
					            
						            
							            
								            |  | 
	Windows内核调试帖子发起人: Coding   发起时间: 2008-08-28 09:45 上午   回复: 9
 
	 
		
			| 
					
						|         | 
						      
						        | 帖子排序: |  |  |  |  
				
					| 
							
								| 
										
											|  2008-08-28, 09:45 上午 |  
											| 
													 Coding 
 
   注册: 2008-05-31
 发 贴: 103
 | 
													
														| 有讨论x86上InterlockedXXX和Spinlocks内部机制的文章吗? 
 |  
														|  |  |  
											| 
													
														|   | 
																
																	| Windows下的各种同步机制有各式各样的特征的限制,我觉得不了解内部如何实现的,只能简单的背诵那些东西,所以想从根本上了解如何实现的。 不知道谁见过些什么资料。 我手头的看的是Microsoft Windows Internals   
 |  |  
														|  | IP 地址: 已记录 | 报告 |  |  |  |  
				
					| 
							
								| 
										
											|  2008-08-28, 09:58 上午 |  
											| 
													 王宇 
 
  
   注册: 2007-05-08
 发 贴: 306
 | 
													
														| Re: 有讨论x86上InterlockedXXX和Spinlocks内部机制的文章吗? 
 |  
														|  |  |  
											| 
													
														|   | 
																
																	| 呵呵,前段时间刚好看过一些,一起讨论讨论。 我觉得最好的资料是Win源代码和Intel手册3A第七章。
 
 问楼主一些问题,如果您能回答就说明你理论上OK寮~  ^_^
 
 例如,钩子的实质是什么、32位MOV指令是单核安全的吗、32位MOV指令是多核安全的吗、计数用i++、i--代码安全吗?INC、DEC呢?关中断是安全的吗、提升IRQL呢、什么是lock指令前缀、xchg多核安全吗?lock sti会怎样?缓存一致性协议..............
 
 |  |  
														|  | IP 地址: 已记录 | 报告 |  |  |  |  
				
					| 
							
								| 
										
											|  2008-08-28, 10:02 上午 |  
											| 
													 王宇 
 
  
   注册: 2007-05-08
 发 贴: 306
 | 
													
														| Re: 有讨论x86上InterlockedXXX和Spinlocks内部机制的文章吗? 
 |  
														|  |  |  
											| 
													
														|   | 
																
																	| OSR有一篇《A Catalog of Windows NT Synchronization Mechanisms》 其实也是泛泛而谈..
 我原来想拿这篇文章做“经典阅读”版块的第三则学习文章的。(“经典阅读”还没开张呢.. 看来我是太懒了... :(  )
 
 |  |  
														|  | IP 地址: 已记录 | 报告 |  |  |  |  
				
					| 
							
								| 
										
											|  2008-08-28, 10:17 上午 |  
											| 
													 Coding 
 
   注册: 2008-05-31
 发 贴: 103
 | 
													
														| Re: 有讨论x86上InterlockedXXX和Spinlocks内部机制的文章吗? 
 |  
														|  |  |  
											| 
													
														|   |  |  
														|  | IP 地址: 已记录 | 报告 |  |  |  |  
				
					| 
							
								| 
										
											|  2008-08-28, 12:43 下午 |  
											| 
													 格蠹老雷 
 
   注册: 2005-12-19
 发 贴: 1,303
 | 
													
														| Re: 有讨论x86上InterlockedXXX和Spinlocks内部机制的文章吗? 
 |  
														|  |  |  
											| 
													
														|   | 
																
																	| 这个方向非常好。Jeffrey Richter的那本《Windows核心编程》从API角度讲的很不错了。但是内核态的还很需要挖掘。其实可以使用Jeffrey的方法,也就是写代码来试验、观察和验证,外加调试追踪。 
 |  |  
														|  | IP 地址: 已记录 | 报告 |  |  |  |  
				
					| 
							
								| 
										
											|  2008-08-28, 13:02 下午 |  
											| 
													 格蠹老雷 
 
   注册: 2005-12-19
 发 贴: 1,303
 | 
													
														| Re: 有讨论x86上InterlockedXXX和Spinlocks内部机制的文章吗? 
 |  
														|  |  |  
											| 
													
														|   | 
																
																	| 刚刚上传了我以前写的一篇《CPU同步机制漫谈》,里面介绍了一些入门级的东西。 http://advdbg.org/download/storeshow.aspx?id=7808a3ed-2940-4356-9256-9f4e4d9d2c98
 
 
 
 |  |  
														|  | IP 地址: 已记录 | 报告 |  |  |  |  
				
					| 
							
								| 
										
											|  2008-09-25, 19:09 下午 |  
											| 
													 MJ0011 
 
   注册: 2008-04-24
 发 贴: 112
 | 
													
														| Re: 有讨论x86上InterlockedXXX和Spinlocks内部机制的文章吗? 
 |  
														|  |  |  
											| 
													
														|   | 
																
																	| 其实就是总线锁呀。。没有那么复杂的。。看一下代码就明白了。。。 
 |  |  
														|  | IP 地址: 已记录 | 报告 |  |  |  |  
				
					| 
							
								| 
										
											|  2008-09-26, 06:06 上午 |  
											| 
													 王宇 
 
  
   注册: 2007-05-08
 发 贴: 306
 | 
													
														| Re: 有讨论x86上InterlockedXXX和Spinlocks内部机制的文章吗? 
 |  
														|  |  |  
											| 
													
														|   | 
																
																	| 显式强制加lock前缀的适用范围是: 
 - The bit test and modify instructions (BTS, BTR, and BTC).
 - The exchange instructions (XADD, CMPXCHG, and CMPXCHG8B).
 - The LOCK prefix is automatically assumed for XCHG instruction.
 - The following single-operand arithmetic and logical instructions: INC, DEC, NOT,
 and NEG.
 - The following two-operand arithmetic and logical instructions: ADD, ADC, SUB,
 SBB, AND, OR, and XOR.
 
 另外的任何指令,以及目标操作数是寄存器操作数的情况都将导致#UD(所以要volatile关键字修饰)。
 
 但是还真的有内核利用这个的——L4的内核。
 
 
 void * L4_KernelInterface(
 L4_Word_t *ApiVersion,
 L4_Word_t *ApiFlags,
 L4_Word_t *KernelId
 )
 {
 void * base_address;
 
 __asm__ __volatile__ (
 " lock; nop"
 : /* outputs */
 "=a" (base_address),
 "=c" (*ApiVersion),
 "=d" (*ApiFlags),
 "=S" (*KernelId)
 /* no inputs */
 /* no clobbers */
 );
 
 return base_address;   /*注意这里!*/
 }
 
 
 case 0xf0: /* lock prefix */
 if (space->get_from_user(addr_offset(addr, 1)) == 0x90)
 {
 /* lock; nop */
 frame->eax = (u32_t)space->get_kip_page_area().get_base();
 frame->ecx = get_kip()->api_version;
 frame->edx = get_kip()->api_flags;
 frame->esi = get_kip()->get_kernel_descriptor()->kernel_id.get_raw();
 frame->eip+= 2;
 return;
 }
 
 他们利用 lock prefix + 非法指令产生异常,然后自己写处理代码,处理代码居然是返回KernelInterface的基址...
 
 很是有创意,不过安全性呢?
 
 |  |  
														|  | IP 地址: 已记录 | 报告 |  |  |  |  
				
					| 
							
								| 
										
											|  2008-10-16, 10:56 上午 |  
											| 
													 admin 
 
   注册: 2005-08-18
 发 贴: 52
 | 
													
														| Re: 有讨论x86上InterlockedXXX和Spinlocks内部机制的文章吗? 
 |  
														|  |  |  
											| 
													
														|   | 
																
																	| 比较Linux和Windows下同步机制的系列文章: http://www.ibm.com/developerworks/cn/linux/l-ipc2lin2.html
 熟悉Windows下同步机制的,可以用这篇文章来了解一下Linux下的情况;反之依然
 
 
 |  |  
														|  | IP 地址: 已记录 | 报告 |  |  |  |  
		
			| 高端调试 » 软件调试 » Windows内核调试 » Re: 有讨论x86上InterlockedXXX和Spinlocks内部机制的文章吗? |  |  
 |  |  |  |