Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

Windows内核调试

帖子发起人: 井底之蛙   发起时间: 2008-12-08 11:46 上午   回复: 2

Print Search
帖子排序:    
   2008-12-08, 11:46 上午
better0332 离线,最后访问时间: 2009/6/29 13:20:47 井底之蛙

发帖数前75位
注册: 2008-12-03
发 贴: 15
WinDBG的bug
Reply Quote
WinDBG好像有这样一个bug:
找个IDT中的中断处理程序,在入口处下个断点,触发异常,WinDBG就断下来了,根据中断门的原理,这时只有CS,EIP,TF,IF,SS,ESP会发生变化,其它的寄存器应该不变。但WinDBG自做主张把FS寄存器改成了30h,看看除0异常:
nt!KiTrap00:
8053f19c 6a00 push 0
8053f19e 66c74424020000 mov word ptr [esp+2],0
8053f1a5 55 push ebp
8053f1a6 53 push ebx
8053f1a7 56 push esi
8053f1a8 57 push edi
8053f1a9 0fa0 push fs
8053f1ab bb30000000 mov ebx,30h
8053f1b0 668ee3 mov fs,bx
8053f1b3 648b1d00000000 mov ebx,dword ptr fs:[0]
8053f1ba 53 push ebx

因该是操作系统把fs置成30h的!
更要命的是我们还没法手工改变FS(改回去又被改回来),这样如果在iret的时候FS还是30h,那么iret之后返回到ring3,FS将被CPU置0(因为30h这个选择子是ring0的),导致后面的函数执行出错(没法注册异常了),而且程序被无声无息的终止!!我在VMWare上测试的,大家看看有没有这个BUG……
调试 rootkit ring3进ring0之门系列[二] -- 中断门 就可以说明这个问题
IP 地址: 已记录   报告
   2008-12-08, 12:40 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: WinDBG的bug
Reply Quote
不认为WinDBG会做这样的改动,你可以用另一个WinDBG做跟踪或者Ctrl+Alt+D观察WinDBG和KD之间的通信来确认。
IP 地址: 已记录   报告
   2008-12-08, 14:37 下午
better0332 离线,最后访问时间: 2009/6/29 13:20:47 井底之蛙

发帖数前75位
注册: 2008-12-03
发 贴: 15
Re: WinDBG的bug
Reply Quote
bp ntKiTrap00
中断后看到fs=30,肯定有问题……
而且fs寄存器改不掉

请看:http://www.debugman.com/read.php?tid=2477
IP 地址: 已记录   报告
高端调试 » 软件调试 » Windows内核调试 » Re: WinDBG的bug

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.