本文基于Windows2003以上32位系统,因为XP处理NMI很弱,我们后面再说。 最近为点硬件写驱动,需要处理关于NMI的一些东西,索性把以前记录的一些资料和最新的体会写下来,希望对大家有用。 Nmi(Non Maskable Interrupt),一般在紧急的电源故障、总线超时或者存储器奇偶校验出错时被发出,对应的中断向量号为2,即int 2。CPU有两根引脚INTR和NMI接受外部中断请求信号:INTR接受可屏蔽中断请求,NMI接受不可屏蔽中断请求。在80386以上,标志寄存器 EFLAGS中的IF标志决定是否屏蔽可屏蔽中断请求。下面是调试器的结果: kd> !idt -a Dumping IDT: 00: 8082409e nt!KiTrap00 01: 8082421a nt!KiTrap01 02: Task Selector = 0x0058 03: 8082462a nt!KiTrap03 04: 808247a6 nt!KiTrap04 05: 80824904 nt!KiTrap05 06: 80824a86 nt!KiTrap06 07: 808250e6 nt!KiTrap07 08: Task Selector = 0x0050 09: 80825518 nt!KiTrap09 0a: 80825632 nt!KiTrap0A //... ff: 808231b0 nt!KiUnexpectedInterrupt207 相关的中断可以查阅详细资料[1],我们只关心下面两个: IDTEntry _KiTrap02, D_INT032 ; 2: NMI/NPX Error IDTEntry _KiTrap08, D_INT032 ; 8: Double Exception 即Windbg中显示的: 02: Task Selector = 0x0058 08: Task Selector = 0x0050 表 示的是系统为处理这两个int而设置的任务门,KGDT_DF_TSS(50h)和KGDT_NMI_TSS(58h)。那么是系统什么时候设置的 呢?ntoskrnl加载的时候,KERNEL_ENTRY_POINT是KiSystemStartup()函数,反汇编不难看出它的流程,你也可以参 考WangYu的一篇文章[2],或者可以参考ReactOs的代码,不过我们简单地反汇编一些: 1)首先是为NMI建立任务门,这样我们就能捕捉到NMI了: INIT:006053CE mov eax, [ebp+var_10] ; 之前由GetMachineBootPointers得到的Idt INIT:006053D1 lea ecx, [eax+10h] ; 16/8 -> 2号中断描述符 INIT:006053D4 mov byte ptr [ecx+5], 85h ; 10000101 -> dpl=0, present, taskgate INIT:006053D8 mov word ptr [ecx+2], 58h ; KGDT_NMI_TSS(58h) INIT:006053DE lea ecx, [edi+58h] INIT:006053E1 mov byte ptr [ecx+5], 89h ; 10001001 -> 32bit, dpl=0, present, TSS32, not busy INIT:006053E5 mov edx, offset _KiNMITSS INIT:006053EA mov eax, edx INIT:006053EC mov [ecx+2], ax ; KgdtBaseLow(2h) INIT:006053F0 shr eax, 10h INIT:006053F3 mov [ecx+7], ah ; KgdtBaseHi(7h) INIT:006053F6 mov [ecx+4], al ; KgdtBaseMid(4h) INIT:006053F9 mov eax, 68h ; MINIMUM_TSS_SIZE(68h) INIT:006053FE mov [ecx], ax ; KgdtLimitLow(0h) INIT:00605401 push edx INIT:00605402 push edx INIT:00605403 call KiInitializeTSS(x) 2)然后是建立堆栈: INIT:00605408 pop edx INIT:00605409 mov eax, cr3 INIT:0060540C mov [edx+1Ch], eax ; TssCr3(1ch) INIT:0060540F mov eax, offset P0BootStack INIT:00605414 mov eax, [eax+38h] INIT:00605417 mov [edx+4], eax ; TssEsp0(4h) , NMI stack INIT:0060541A mov [edx+38h], eax INIT:0060541D mov dword ptr [edx+20h], offset _KiTrap02
据说可瑞康绵羊奶粉是一款很不错的绵羊奶粉,不过这款奶粉究竟好不好呢,味道口感如何,冲泡方面容易吗,友谊长存小编就来说说可瑞康绵羊奶粉的使用感受吧。 宝贝整体 终于收到了期待已经的羊奶粉,之前喝过别...
近日一则意大利将以7.8元出售房屋的消息把很多网友都惊呆了,购买一套房子居然只需要7.8元?其实这些房子都是需要重建的“废墟”,大多都曾经历过自然灾害,虽然购房便宜,但改建费可不是一笔小数目,因此意大...
10月30日上午,广西壮族自治区玉林市中级人民法院依法对被告人李凤萍故意杀人、盗窃一案作出一审判决。以故意杀人罪,判处死刑,剥夺政治权利终身;以盗窃罪,判处有期徒刑五年,并处罚金三万元。数罪并罚,...
都说寒从脚起,宝宝光脚走路很多父母会担心生病着凉,会感冒,但是光脚走路可以更好的和大地接触,便于更快的学会走路,那么宝宝光脚走路会生病吗?有什么好处?下面友谊长存小编带来介绍。 宝宝光脚走路会生病吗...
ROE/ROA/ROI的区别与联系 ROE 的意义: →→ROE股东权益报酬率,就是「(税后净利) 占 (股东权益) 的百分比」之意。 ROE 的公式: →→ROE股东权益报酬率 = (税...
本文导读目录: 1、黑客们都用什么笔记本电脑 2、黑客是怎么修笔记本电脑的 3、黑客适合用什么笔记本电脑? 4、顶尖黑客用什么笔记本电脑? 5、推荐几个黑客专业的笔记本电脑 6、黑...