【作者:张佩】【原文: http://www.yiiyee.cn/Blog/0x7f-1/】
内核之所以脆弱,是因为它没有办法很好地隔离自己。它是一个大整体,属于一荣俱荣、一损俱损的大整体。它需要一切都按部就班地执行有序。否则,一个角落里的蝴蝶扇动翅膀,就能招来太平洋上的绝大风暴。现在看到的是一个内核中的除0错误。用户程序中的除零导致进程崩溃,内核中则系统崩溃。 继续阅读“虫趣:除0错误”
3,890 total views, 2 views today
万物生于一;面对纷繁,要看透它一的底色
【作者:张佩】【原文: http://www.yiiyee.cn/Blog/0x7f-1/】
内核之所以脆弱,是因为它没有办法很好地隔离自己。它是一个大整体,属于一荣俱荣、一损俱损的大整体。它需要一切都按部就班地执行有序。否则,一个角落里的蝴蝶扇动翅膀,就能招来太平洋上的绝大风暴。现在看到的是一个内核中的除0错误。用户程序中的除零导致进程崩溃,内核中则系统崩溃。 继续阅读“虫趣:除0错误”
3,890 total views, 2 views today
【作者:张佩】 【原文:http://www.yiiyee.cn/Blog/0x19-1/】
内核在管理内存的时候,为了提高内存使用效率,对于小片内存的申请(小于一个PAGE大小),都是通过内存池来操作的。系统里面有两种不同的内存池:分页内存池和非分页内存池。这二者的区别是很明显的:分页内存池所使用的内存页面,随时有可能被分页出去;而非分页内存池所使用的虚拟页面,总是留驻在物理内存中。
对于运行在高中断级别(>=DISPATCH_LEVEL 2)上的代码,它使用的内存只应该是从非分页内存池中申请的。因为系统无法在这些中断级上处理页错误。
除了上面的区别外,系统对两个内存池的管理是极类似的。那么,系统是怎么管理这些内存池的呢?当请求者申请内存的时候,池管理器首先会检查自己当前的储备内存,以确认能否满足申请者的要求,如果可以,则从储备内存中进行分配;否则就重新申请一个新的内存页,并从新内存页中划出一块给申请者,剩下的留作储备内存继续使用。 继续阅读“虫趣:BAD POOL CALLER (par1: 0x20)”
5,508 total views, 2 views today
【作者:张佩】【原文: http://www.yiiyee.cn/Blog/bsod-0x3b-1/】
这是一个BSOD 0x3B的dump文件,BSOD 0x3B所代表错误的描述是:SYSTEM_SERVICE_EXCEPTION,表示在一个系统线程里面发生了不可解决的系统异常,导致的系统错误。
系统线程是一个笼统的概念,凡是通过内核函数IoCreateSystemThread创建的线程,都是系统线程。内核是一个混沌的整体,内核里面不存在进程的概念。但是它却需要分配一些独立执行的任务,线程是执行这些独立任务的最佳载体。但是线程必须依附在进程中。为了解决这种矛盾,系统专门创建了一个SYSTEM进程,这个进程没有用户模式的代码,专门作为内核线程的载体存在。系统为SYTEM进程分配固定的进程号4。在Windbg内核调试会话中运行命令!process 4将列印SYSTEM进程信息:
0: kd> !process 4 0 Searching for Process with Cid == 4 Cid handle table at fffff8a000004e80 with 754 entries in use PROCESS fffffa8003699040 SessionId: none Cid: 0004 Peb: 00000000 ParentCid: 0000 DirBase: 00187000 ObjectTable: fffff8a0000019b0 HandleCount: 1559. Image: System
继续阅读“虫趣:空指针引用(SYSTEM_SERVICE_EXCEPTION)”
6,880 total views, no views today
【作者:张佩】【原文: http://www.yiiyee.cn/Blog/bsod-0xa-1/】
得到一个BSOD 0xA的dump文件,BSOD 0xA代表的是 IRQL_NOT_LESS_OR_EQUAL错误,也就是说试图在错误的中断级上进行特定操作。在这个例子中,错误的原因是试图在中断级2上解决页错误,引发了系统蓝屏。
用windbg打开dump文件后,先用kv和r命令获取当前状态:
0: kd> kv;r
ChildEBP RetAddr Args to Child
81256650 815cd41b 0000000a c9495000 00000002 nt!KiBugCheck2
81256650 81558315 0000000a c9495000 00000002 nt!KiTrap0E+0x1b3 (FPO: [0,0] TrapFrame @ 81256670)
812566e4 ad6a47e4 c9494efc 00000000 00000120 nt!memset+0x45 (FPO: [3,0,0])
81256734 ad6a3a5b c35d6f7c 00000010 d5140dfc XXX!initializeIsoUrb+0x74 (FPO: [Non-Fpo]) (CONV: thiscall)
81256770 ad6a3c73 c35d6f7c c346a890 00000001 XXX!completeRequest+0x1cb (FPO: [Non-Fpo]) (CONV: thiscall)
81256794 8190852a 00000000 d51bade0 c35d6f7c XXX!completeFunc+0xe3 (FPO: [Non-Fpo]) (CONV: stdcall)
812567c8 814d5885 00000000 d51bade0 81256890 nt!IovpLocalCompletionRoutine+0x12f (FPO: [3,5,4])
81256864 819090f0 8163a015 8b136708 88441a38 nt!IopfCompleteRequest+0x42e (FPO: [Non-Fpo])
812568c8 8fae1ef7 8fe50028 88441a38 8fe50b88 nt!IovCompleteRequest+0x123 (FPO: [Non-Fpo])
8125697c 8fae268a d51bade0 8fe50b88 00026202 USBPORT!USBPORT_Core_iCompleteDoneTransfer+0x99a (FPO: [3,39,4])
812569a4 8fae8df6 246b5702 8fe50028 8fe50b88 USBPORT!USBPORT_Core_iIrpCsqCompleteDoneTransfer+0x1ff (FPO: [1,4,0])
812569e0 8fae9140 8fe50028 8fe50b88 246b5702 USBPORT!USBPORT_Core_UsbIocDpc_Worker+0x1b7 (FPO: [Non-Fpo])
81256a28 814e0bc3 8fe50b94 8fe50b88 00000000 USBPORT!USBPORT_Xdpc_Worker_IocDpc+0x1c9 (FPO: [Non-Fpo])
81256ae0 814e07fe 816860c0 81256b28 bedc4d40 nt!KiExecuteAllDpcs+0x1f2 (FPO: [Non-Fpo])
81256c00 815cea74 00000000 0000000e 00000000 nt!KiRetireDpcList+0xed (FPO: [0,65,4])
81256c04 00000000 0000000e 00000000 00000000 nt!KiIdleLoop+0x38 (FPO: [0,0,0])
eax=00000002 ebx=00000001 ecx=00000001 edx=00000000 esi=81558315 edi=c9495000
eip=81553c24 esp=81256654 ebp=81256670 iopl=0 nv up ei pl nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000202
nt!KiBugCheck2:
81553c24 55 push ebp
继续阅读“虫趣:内存误操作引发中断级错误(IRQL_NOT_LESS_OR_EQUAL)”
6,031 total views, 2 views today
【作者:张佩】【原文URL: http://www.yiiyee.cn/Blog/win80x7e/】
[download id=”3″]
有肉的地方总能发现蚊蝇。有软件的地方,就有臭虫相随(注1)。操作系统就是个大软件,所以臭虫是少不了的。最近碰到一个Windows 8的系统臭虫,报给微软并得到了确认,他们确保会在Windows Blue上解决此问题。到底是什么问题呢?今日有空,和大家一起来聊聊。
继续阅读“虫趣:Win8系统Bug分析一例”
7,524 total views, 4 views today