能力值:
( LV2,RANK:10 )
|
-
-
2 楼
期待大牛来解答。
|
能力值:
( LV12,RANK:360 )
|
-
-
3 楼
|
能力值:
( LV12,RANK:250 )
|
-
-
4 楼
unsigned char idt[8];
__asm sidt fword ptr idt;
unsigned long lpidt = *(unsigned long*)&idt[2];
KdPrint(("IDT==0x%x\n",lpidt));
unsigned short tmp = *(unsigned short*)((lpidt+8*9)+6);
KdPrint(("int 9==0x%x\n",(unsigned long)tmp));
tmp&=0xFF00;
if(tmp!=0)
{
unsigned short tmp2 = *(unsigned short*)((lpidt+8*0xE)+6);
KdPrint(("int E==0x%x\n",(unsigned long)tmp2));
if(tmp2&0xFF00 != tmp)
{
*(unsigned short*)((lpidt+8*0xE)+6) = 0;
KdPrint(("done\n"));
}
}
|
能力值:
( LV12,RANK:360 )
|
-
-
5 楼
我把这段代码去掉就不会出错了!!
; sidt idtr
; lea ebx,idtr
; mov ecx,DWORD ptr[ebx+2]
; add ecx,368 ;KiSystemService 2E*8
; mov ebx,0
; mov bx,WORD ptr[ecx+6]
; shl ebx,16
; mov bx,WORD ptr[ecx]
; mov KiSystemService,ebx
; invoke DbgPrint,addr KiSystemServicestr,ebx
|
能力值:
( LV12,RANK:360 )
|
-
-
6 楼
[QUOTE=triones;838251]unsigned char idt[8];
__asm sidt fword ptr idt;
unsigned long lpidt = *(unsigned long*)&idt[2];
KdPrint(("IDT==0x%x\n",lpidt));
unsigned short...[/QUOTE]
看不懂..说说是什么问题?
|
能力值:
( LV12,RANK:250 )
|
-
-
7 楼
纵观整个代码,我只发现这点不同:sidt fword ptr idt; --- sidt idtr
好像的确需要fword ptr
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
没有啊,我试了,没有蓝屏
|
能力值:
( LV12,RANK:360 )
|
-
-
9 楼
两个指令是一样的.....试过了
|
能力值:
( LV12,RANK:360 )
|
-
-
10 楼
那就奇怪了
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
上调试器看下dump信息。
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
没有看懂
|
能力值:
( LV12,RANK:360 )
|
-
-
13 楼
知道原因了.EDX的值要保护和恢复...哎..又是自己解决的...........
|
能力值:
( LV12,RANK:360 )
|
-
-
14 楼
说错了 是EBX
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
ebx,esi,edi这些寄存器都要保存的。
|
|
|