-
-
[讨论]WinDBG好像有这样一个bug
-
发表于:
2008-12-8 00:10
4575
-
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之门系列[二] -- 中断门 就可以说明这个问题
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!