现在的位置: 首页 > 综合 > 正文

多CPU的机器上在驱动中如何HOOK中断

2013年04月29日 ⁄ 综合 ⁄ 共 1558字 ⁄ 字号 评论关闭
 bool InitMultiCPUInformation() .9u0WP95  
{ A[}I -  
     DWORD* dwPCRAddr; <X; #=H  
     DWORD dwCPUNumbers=1;       )-nFfjLs  
     BYTE* Address=(BYTE*)HalInitializeProcessor; 7 l/O<zm  
     DWORD i,len=128; -W,j"M;  
     bool bOK=false; +/qW V>  
L7kNK :  
     memset(gCPULocalAPIC_ID,0xff,sizeof(gCPULocalAPIC_ID)); |1`%WQ[qo  
     __try " d !  
     { 2`bjty%$  
           for(i = 0; i < len;i++) /Wj3|-4p  
           { 4ra&/?N9"  
                 if(Address==0x89) > 5c#_@  
                 { ^o<50Tcl  
                       if(*(WORD*)&Address[i+1]==0x850c) r]]Gtc/S;  
                       { V<@n(N/  
                             dwPCRAddr=*(DWORD**)&Address[i+3]; `}DnBOh  
                             if((*(DWORD*)&dwPCRAddr & 0x80000000)&& *(BYTE**)&dwPCRAddr<=&Address[0x80000]) 'xfa^V~|  
                             { /07YJv_?  
                                   for(;dwPCRAddr[dwCPUNumbers-1];dwCPUNumbers++); CVc:/?f(  
                                   bOK=true; T/j+M.&Sja  
                             } A: e/Z^  
                       } U C(bQNq  
                 } ">d5z8  
           } 'TOWbZ_c  
     } <Q, C({OL  
     __except(EXCEPTION_EXECUTE_HANDLER) )S)tJxA{  
     { B5 5X/:m  
           ::DbgPrint("InitMultiCPUInformation exception ..../n"); yT3VFM1  
     } `<q<%V7  
     if(bOK) ?)71?Q-  
     { O[A^i|R  
           gCPUNumbers=dwCPUNumbers-1; @fr @>[+  
           gPCRArray = (PKPCR*)dwPCRAddr; &MX@r`qN  
           gpMCPUReg = new X86_REG_CONTEXT[gCPUNumbers]; +c:Od40y  
           if(gpMCPUReg==NULL) .6m"M| t  
                 return false; r]wZX 5(  
           gpMCPULocalApic = new SAVELOCALAPIC[gCPUNumbers]; ?dQ]n!TTh  
           if(gpMCPULocalApic==NULL) b!NW!z$,h  
                 return false; m*T}gn80p  
     } D*XxVewE  
     ::DbgPrint("Syser : Found %d CPU(s)/n",gCPUNumbers); Zh7ZYL?t  
     return true; /3^:@[D  
} 7Cgtkyd.  
;/0~y*<A_h  
以上的函数获得了每个CPU的 PKPCR结构的指针。你想要的数据都在这个结构里面了。包括每个CPU的IDT,GDT,TSS等等信息

抱歉!评论已关闭.