约有 1,303 项符合查询结果, 以下是第 95 - 131项。
费时 < 1 秒。
这是个双CPU(可能双核、超线程)的系统,故障发生在休眠的后期,一个CPU(发起蓝屏的这个)在执行HalpSetInterruptControllerWakeupState,也就是保存中断控制器有关的状态,以备醒来时使用。
这样的过程需要系统的所有CPU都执行一次。当前的CPU执行好后,它调用hal!HalStartNextProcessor让另一个CPU去执行。但是HalStartNextProcessor返回失败,于是当前CPU就发起蓝屏了,Arg1参数是常量,就代表上面描述的这种情况,Arg3代表CPU总个数,Arg4总是为0,Arg2是HalpSetInterruptControllerWakeupState函数的第一个参数。
Posted in WinDbg
by
格蠹老雷
on 2009-05-07
OS在调度和执行时是不区分一个逻辑CPU到底是一个Core、一个Hyper-threading还是一个完全独立的CPU的。对于Hyper-threading的情况,是这个逻辑CPU本身决定是否要继续执行,还是需要等待共享的计算资源。所以,我觉得,几个问题的答案都是YES :-)
Posted in Windows内核
by
格蠹老雷
on 2009-05-07
处于冻结状态的CPU是在KiFreezeTargetExecution函数中执行,因为会反复执行pause指令,可以认为是处于比较省电的状态,关键的汇编代码如下:
nt!KiFreezeTargetExecution+0x145:
818dbeb1 and dword ptr [esi+18F4h],0FFFFFFDFh
818dbeb8 mov eax,dword ptr [nt!KiFreezeOwner (81928d34)]
818dbebd or dword ptr [eax+18F4h],20h
818dbec4 pause
818dbec6 mov eax,dword ptr ...
Posted in WinDbg
by
格蠹老雷
on 2009-05-07
这个问题问得很好,说明楼主思考的很深入。王宇的回答是真正的''simple answer'',可以简单那么理解,但是实际上与事实不符^_^。肯定有一个核要工作来和调试器对话,这个核就是提示符提示的那个核。其它核处于所谓的冻结状态,在那里一直循环,一边等待解冻,同时还要时刻准备着变成冻结别人的FreezeOwner——也就是当在WinDBG中切换当前CPU时,“冻着”的要恢复出来,刚才活动的要“冻”起来......
Posted in WinDbg
by
格蠹老雷
on 2009-05-07
这个栈回溯看起来没有异常,WinLogon正使用默认的GINA模块(msgina.dll)来呈现登录对话框,等待窗口消息。
Posted in Windows内核调试
by
格蠹老雷
on 2009-05-06
这是NT内核抽象出来的CPU特性,记录在处理器的KPRCB结构的FeatureBits字段中,在内核启动时,nt!KiGetFeatureBits函数使用CPUID指令收集信息,分别按照AMD和INTEL CPU的特点将得到的信息放到FeatureBits中,各个位的定义在ReactOS的源代码中中可以找到:
00070 //00071 // Kernel Feature Bits00072 //00073 #define ...
Posted in Windows内核调试
by
格蠹老雷
on 2009-05-04
Vista的安装程序是基于WinPE(Windows Pre-installation Enviroment)的。WinPE也支持内核调试,启用调试的方法与普通Vista一样,《软件调试》的18章有介绍。
Posted in Windows内核调试
by
格蠹老雷
on 2009-05-03
从栈回溯来看,(1)在WinGUI进程中,xerces模块内执行的浮点类指令触发了浮点异常(#NM);(2)在系统的浮点异常处理函数KiTrap07中,fxsave指令用来把浮点计算的上下文状态先保存起来;(3)保存的位置是当前线程的内核态栈,也就是目前esi所指向的内存,起始地址为bcf4fdf0;(4)在向以上地址保存数据时,触发了页错误异常(#PF);(5)负责处理页错误异常的KiTrap0E被执行,这是很复杂的一个异常处理函数,当这个函数认为当前是在高级别触发的一个页错误时,根据系统的规则,此情况下不可以执行虚拟内存交换机制,于是发起蓝屏(Bug Check),蓝屏的错误码就是IRQL_NOT_LESS_OR_EQUAL,意思是当前的IRQL没有小于或者等于(not less or ...
Posted in Windows内核调试
by
格蠹老雷
on 2009-05-03
使用!pte命令可以显示一个线性地址所属页面是否为大页面。如果为大页面,那么就是2MB/4MB,否则就是4KB
对于后一个问题,这个Gran是用来计算段的大小的,如果Gran为0,那么Limit字段是以字节为单位的,如果为1,那么就是以4KB为单位的,这里4KB是固定的只是作为单位用,与PAE无关。
Posted in 《软件调试》答疑
by
格蠹老雷
on 2009-04-28