|  |  |  |  |  |  | 
					            
						            
							            
								            |  | 
	WinDbg帖子发起人: merry   发起时间: 2009-04-15 13:22 下午   回复: 8
 
	 
		
			| 
					
						|         | 
						      
						        | 帖子排序: |  |  |  |  
				
					| 
							
								| 
										
											|  2009-04-15, 13:22 下午 |  
											| 
													 merry 
 
   注册: 2008-09-26
 发 贴: 61
 | 
													
														| 请问如何用windbg验证SSDT和IDT存储在只读页面? 
 |  
														|  |  |  
											| 
													
														|   | 
																
																	| 看到有资料写到: SSDT和IDT都在操作系统管理的只读页面。
 
 Q:请问如何用windbg验证SSDT和IDT存储在只读页面?
 
 |  |  
														|  | IP 地址: 已记录 | 报告 |  |  |  |  
				
					| 
							
								| 
										
											|  2009-04-15, 13:40 下午 |  
											| 
													 格蠹老雷 
 
   注册: 2005-12-19
 发 贴: 1,303
 | 
													
														| Re: 请问如何用windbg验证SSDT和IDT存储在只读页面? 
 |  
														|  |  |  
											| 
													
														|   | 
																
																	| 找到地址后(r igtr),使用!pte命令来观察PTE,里面的位1为1表示可以读写,0代表只读,《软件调试》P56页或者IA-32手册上有描述。 
 |  |  
														|  | IP 地址: 已记录 | 报告 |  |  |  |  
				
					| 
							
								| 
										
											|  2009-04-15, 16:15 下午 |  
											| 
													 merry 
 
   注册: 2008-09-26
 发 贴: 61
 | 
													
														| Re: 请问如何用windbg验证SSDT和IDT存储在只读页面? 
 |  
														|  |  |  
											| 
													
														|   | 
																
																	| Hi!Raymond老师, 
 Quote:
 r igtr?
 
 IGTR是什么寄存器,查了一下IA-32 Vol.3A手册没有找到。谢谢!
 
 |  |  
														|  | IP 地址: 已记录 | 报告 |  |  |  |  
				
					| 
							
								| 
										
											|  2009-04-15, 21:58 下午 |  
											| 
													 格蠹老雷 
 
   注册: 2005-12-19
 发 贴: 1,303
 | 
													
														| Re: 请问如何用windbg验证SSDT和IDT存储在只读页面? 
 |  
														|  |  |  
											| 
													
														|   | 
																
																	| 就是CPU中的IDTR寄存器,《软件调试》P273 
 |  |  
														|  | IP 地址: 已记录 | 报告 |  |  |  |  
				
					| 
							
								| 
										
											|  2009-04-16, 17:27 下午 |  
											| 
													 格蠹老雷 
 
   注册: 2005-12-19
 发 贴: 1,303
 | 
													
														| Re: 请问如何用windbg验证SSDT和IDT存储在只读页面? 
 |  
														|  |  |  
											| 
													
														|   | 
																
																	| 抱歉,IGTR属笔误,应该是IDTR。GDT表的有关寄存器叫GDTR。 
 |  |  
														|  | IP 地址: 已记录 | 报告 |  |  |  |  
				
					| 
							
								| 
										
											|  2009-04-16, 17:46 下午 |  
											| 
													 王宇 
 
  
   注册: 2007-05-08
 发 贴: 306
 | 
													
														| Re: 请问如何用windbg验证SSDT和IDT存储在只读页面? 
 |  
														|  |  |  
											| 
													
														|   | 
																
																	| 嗨,想验证简单 
 整一驱动,直接操作那些地址,蓝了,就对了 :P
 
 |  |  
														|  | IP 地址: 已记录 | 报告 |  |  |  |  
				
					| 
							
								| 
										
											|  2009-04-17, 13:37 下午 |  
											| 
													 merry 
 
   注册: 2008-09-26
 发 贴: 61
 | 
													
														| Re: 请问如何用windbg验证SSDT和IDT存储在只读页面? 
 |  
														|  |  |  
											| 
													
														|   | 
																
																	| Quote: 整一驱动,直接操作那些地址,蓝了,就对了 :P
 
 Sure! It works, but it's my last choice.  :P
 -----------------------------------------------------------------------
 Quote:
 使用!pte命令来观察PTE,里面的位1为1表示可以读写,0代表只读
 -----------------------------------------------------------------------
 kd> r idtr
 idtr=8003f400
 kd> !pte 8003f400
 VA 8003f400
 PDE at 00000000C0602000    PTE at 00000000C04001F8
 contains 00000000002A1163  contains 000000000003F163
 pfn 2a1        -G-DA--KWEV    pfn 3f         -G-DA--KWEV
 
 Q1:idt所在页面是可写(W)和可执行(E)的吗?
 
 kd> dd nt!keservicedescriptortable
 8055b6e0  80503734 00000000 0000011c 80503ba8
 8055b6f0  00000000 00000000 00000000 00000000
 8055b700  00000000 00000000 00000000 00000000
 8055b710  00000000 00000000 00000000 00000000
 8055b720  00000002 00002710 bf80da45 00000000
 8055b730  ba571a80 b981f9e0 89903f9c 806f4040
 8055b740  00000000 00000000 9c4487d2 fffffff7
 8055b750  a7fb4492 01c9bc7b 00000000 00000000
 
 kd> !pte 80503734
 VA 80503734
 PDE at 00000000C0602010    PTE at 00000000C0402818
 contains 00000000004009E3  contains 0000000000000000
 pfn 400        -GLDA--KWEV    LARGE PAGE pfn 503
 
 Q2:SSDT所在页面显示的是 LARGE PAGE,如何知道其读写属性?
 
 
 
 |  |  
														|  | IP 地址: 已记录 | 报告 |  |  |  |  
				
					| 
							
								| 
										
											|  2009-04-20, 08:50 上午 |  
											| 
													 compiler 
 
   注册: 2008-04-22
 发 贴: 21
 | 
													
														| Re: 请问如何用windbg验证SSDT和IDT存储在只读页面? 
 |  
														|  |  |  
											| 
													
														|   | 
																
																	| 00000000004009E3  看这个的bit1 
 |  |  
														|  | IP 地址: 已记录 | 报告 |  |  |  |  
				
					| 
							
								| 
										
											|  2009-04-22, 09:26 上午 |  
											| 
													 merry 
 
   注册: 2008-09-26
 发 贴: 61
 | 
													
														| Re: 请问如何用windbg验证SSDT和IDT存储在只读页面? 
 |  
														|  |  |  
											| 
													
														|   | 
																
																	| Quote 1: kd> !pte 80503734
 
 PDE at 00000000C0602010 PTE at 00000000C0402818
 contains 00000000004009E3 contains 0000000000000000
 
 Quote 2:
 00000000004009E3  看这个的bit1
 
 我认为应该看PTE中contains的数据,而不是PDE的contains。
 原因如下:
 9E3中的‘3’---0011,第一位为1,应可写,然而SSDT的页面为只读,所以不应该看这个数据。
 
 因为系统使用了PAE,所以和以前显示数据方式不同,故有此问题。
 
 
 
 
 |  |  
														|  | IP 地址: 已记录 | 报告 |  |  |  |  
		
			| 高端调试 » 软件调试 » WinDbg » Re: 请问如何用windbg验证SSDT和IDT存储在只读页面? |  |  
 |  |  |  |