首页
社区
课程
招聘
[求助]dump文件显示很诡异 MJ解释下为何重入APC
发表于: 2009-7-20 14:45 34411

[求助]dump文件显示很诡异 MJ解释下为何重入APC

2009-7-20 14:45
34411

我是插APC杀进程代码

ExitApc=ExAllocatePoolWithTag(NonPagedPool,sizeof(KAPC),MEM_TAG);
                if(ExitApc==NULL)
                {
                        KdPrint(("[KillProcessWithApc] malloc memory failed \n"));
                        return;
                }
                KeInitializeApc(ExitApc,
                        ethread,                         //线程
                        OriginalApcEnvironment,
                        KernelKillThreadRoutine,      //APC例程
                    NULL,
                        NULL,
                        KernelMode,
                        0);//为线程初始化APC
                status=myKeInsertQueueApc(ExitApc,NULL,NULL,0);   //插入Apc到线程队列
                if(!NT_SUCCESS(status))
                        return;
               
FOLLOWUP_IP:
Listprocess!DispatchIoctl+314 [d:\sysdog\listprocess\listprocess.c @ 1150]
f9ca01e4 837dec00        cmp     dword ptr [ebp-14h],0

FAULTING_SOURCE_CODE:  
  1146:                         //status=STATUS_SUCCESS;
  1147:                 }break;
  1148:
  1149:         }
> 1150:         if(status == STATUS_SUCCESS)
  1151:                 pIrp->IoStatus.Information = uOutSize;
  1152:         else
  1153:                 pIrp->IoStatus.Information = 0;
  1154:        
  1155:         pIrp->IoStatus.Status = status;

SYMBOL_STACK_INDEX:  1

SYMBOL_NAME:  Listprocess!DispatchIoctl+314

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: hardware

IMAGE_NAME:  hardware

DEBUG_FLR_IMAGE_TIMESTAMP:  0

FAILURE_BUCKET_ID:  IP_MISALIGNED

BUCKET_ID:  IP_MISALIGNED

Followup: MachineOwner
---------


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (117)
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
2
在IRP处理中调用函数就蓝屏
2009-7-20 14:45
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
3
传DUMP和驱动代码
2009-7-20 14:52
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
4
传好了  就是插APC杀进程
2009-7-20 15:00
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
5
遍历线程 修改权限 插APC 结束
2009-7-20 15:02
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
6
非常感谢啊   
2009-7-20 16:01
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
7
你给的驱动文件和PDB不对 ,DUMP里是20号编译的,你给的是17号的,害我看了半天。。。
2009-7-20 16:24
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
8
哦 那我重新上传附件
2009-7-20 16:29
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
9
注释掉这几句就不会蓝  
ExitApc=ExAllocatePoolWithTag(NonPagedPool,sizeof(KAPC),MEM_TAG);

                if(ExitApc==NULL)

                {

                        KdPrint(("[KillProcessWithApc] malloc memory failed \n"));

                        return;

                }

                KeInitializeApc(ExitApc,

                        ethread,                         //线程

                        OriginalApcEnvironment,

                        KernelKillThreadRoutine,      //APC例程

                    NULL,

                        NULL,

                        KernelMode,

                        0);//为线程初始化APC

                status=myKeInsertQueueApc(ExitApc,NULL,NULL,0);   //插入Apc到线程队列

                if(!NT_SUCCESS(status))

                        return;

               我猜还是这没写对,在看看
2009-7-20 16:32
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
10
if(status == STATUS_SUCCESS)  第一次遇到显示这种错误
2009-7-20 16:33
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
11
估计你myKeInsertQueueApc找错了~
2009-7-20 16:34
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
12
Use !analyze -v to get detailed debugging information.

BugCheck 1000008E, {c0000005, 804e6413, f796db0c, 0}

Probably caused by : hardware ( nt!CcSetFileSizes+16b )

Followup: MachineOwner
---------
2009-7-20 16:34
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
13
我验证过了啊  
对结束的进程如下信息核对:
EPROCESS
KeInsertQueueApc地址
线程数目
线程地址 都仔细的打印验证 跟我机器一模一样
2009-7-20 16:36
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
14
00004220        14.44483948        [DispatchIoctl] eprocess :0x8a01d6c0       
00004221        14.44487762        [GetPspTerminateProcess] size:0x8bcc       
00004222        14.44497490        [GetPspTerminateProcess] NtoskerlBase:0x804d8000       
00004223        14.44499493        [RecordThreadAddress] KeInsertQueueApc: 0x804e6ccf       
00004224        14.44501400        [RecordThreadAddress] num: 0xb       
00004225        14.44503403        [RecordThreadAddress] address: 0x88e56020       
00004226        14.44505310        [RecordThreadAddress] address: 0x88e43408       
00004227        14.44508076        [RecordThreadAddress] address: 0x88fac908       
00004228        14.44509983        [RecordThreadAddress] address: 0x8903cda8       
00004229        14.44511890        [RecordThreadAddress] address: 0x88e566e8       
00004230        14.44513893        [RecordThreadAddress] address: 0x88efcda8       
00004231        14.44515800        [RecordThreadAddress] address: 0x88e7cda8       
00004232        14.44517708        [RecordThreadAddress] address: 0x88e7cb30       
00004233        14.44519711        [RecordThreadAddress] address: 0x88eb3780       
00004234        14.44521618        [RecordThreadAddress] address: 0x88dcf020       
00004235        14.44523525        [RecordThreadAddress] address: 0x889cb318
2009-7-20 16:40
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
15
我电脑上锐捷的进程信息  打印出来的没错误
2009-7-20 16:41
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
16
你又传一个注释掉的版本,把你蓝屏时的那个版本的驱动传上来啊~或者传一个kernel dump
2009-7-20 16:43
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
17
lkd> u 0x804e6ccf
nt!KeInsertQueueApc:
804e6ccf 8bff            mov     edi,edi
804e6cd1 55              push    ebp
804e6cd2 8bec            mov     ebp,esp
804e6cd4 83ec0c          sub     esp,0Ch
804e6cd7 53              push    ebx
804e6cd8 56              push    esi
804e6cd9 57              push    edi
804e6cda 8b7d08          mov     edi,dword ptr [ebp+8]
2009-7-20 16:50
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
18
dt _eprocess  0x8a01d6c0

0x190 ThreadListHead   : _LIST_ENTRY [ 0x88e5624c - 0x88ae224c ]
   +0x198 SecurityPort     : (null)
   +0x19c PaeTop           : (null)
   +0x1a0 ActiveThreads    : 0xb
2009-7-20 16:51
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
19
我发现我线程地址跟xuetr显示的 有一个不一样
2009-7-20 16:56
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
20
终于传对文件了。。。原因就是你没找对地址:

kd> dd f796dbbc-4 (ebp-4)
f796dbb8  804e6411 f796dc34 f9ca01e4 815ecda0
f796dbc8  0000e411 8155d230 815e6da0 00000000
f796dbd8  000000d8 f796dbec 00000000 f796dc44
f796dbe8  8055b6c0 80545461 0000000c 00000000
f796dbf8  8153af90 00000000 8163f1e0 0000001c
f796dc08  0000e411 815ecda0 f796dc34 80604229
f796dc18  00222020 00000008 c0000010 81744bf8
f796dc28  8159d3f8 81744bf8 00000000 f796dc58
kd> u 804e6411
nt!CcSetFileSizes+0x169:
804e6411 00eb            add     bl,ch
804e6413 0b39            or      edi,dword ptr [ecx] <---地址找错了,于是崩在这里
804e6415 7e4c            jle     nt!CcSetFileSizes+0x1bb (804e6463)
804e6417 742b            je      nt!CcSetFileSizes+0x19c (804e6444)
804e6419 8b5d0c          mov     ebx,dword ptr [ebp+0Ch]
804e641c 8b7d0c          mov     edi,dword ptr [ebp+0Ch]
804e641f 8a4d0f          mov     cl,byte ptr [ebp+0Fh]
804e6422 ff151c874d80    call    dword ptr [nt!_imp_KfLowerIrql (804d871c)]
kd> u KeInsertQueueApc
nt!KeInsertQueueApc:
804fb704 8bff            mov     edi,edi
804fb706 55              push    ebp
804fb707 8bec            mov     ebp,esp
804fb709 83ec0c          sub     esp,0Ch
804fb70c 53              push    ebx
804fb70d 56              push    esi
804fb70e 57              push    edi
804fb70f 8b7d08          mov     edi,dword ptr [ebp+8]
2009-7-20 16:56
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
21
call过去后挂了,因为地址不对,挂就挂在你找到的错误的地址的第二行

TRAP_FRAME:  f796db0c -- (.trap 0xfffffffff796db0c)
ErrCode = 00000000
eax=814f32d8 ebx=8159d388 ecx=00000000 edx=00000000 esi=815e6da0 edi=8155d230
eip=804e6413 esp=f796db80 ebp=f796dbbc iopl=0         nv up ei ng nz na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010286
nt!CcSetFileSizes+0x16b:
804e6413 0b39            or      edi,dword ptr [ecx]  ds:0023:00000000=????????
Resetting default scope

CUSTOMER_CRASH_COUNT:  4

DEFAULT_BUCKET_ID:  COMMON_SYSTEM_FAULT

BUGCHECK_STR:  0x8E

PROCESS_NAME:  Project1.exe

MISALIGNED_IP:
nt!CcSetFileSizes+16b
804e6413 0b39            or      edi,dword ptr [ecx]

LAST_CONTROL_TRANSFER:  from f9ca01e4 to 804e6413

STACK_TEXT:  
f796dbbc f9ca01e4 815ecda0 0000e411 8155d230 nt!CcSetFileSizes+0x16b
WARNING: Stack unwind information not available. Following frames may be wrong.
f796dc34 804eedf9 8165f778 8159d388 806d12d0 Listprocess+0x31e4
2009-7-20 16:59
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
22
线程地址?
函数地址没错啊
2009-7-20 17:02
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
23
通过EPROCESS 的list链遍历线程
  Head=epro+0x190;              //List_entry第一个节点地址
  for(i=0;i<num;i++)
  {   
    //记录线程地址
      Head=(ULONG)((PLIST_ENTRY)Head)->Flink;
        address=Head-0x22c;
        KdPrint(("[RecordThreadAddress] address: 0x%x\n",address));      //打印线程地址
2009-7-20 17:06
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
24
你取的函数地址(KeInserQueueApc)是错误的,至少在这台崩溃的机器上是错误的,不同机器上的函数地址是不同的
2009-7-20 17:07
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
25
最后一个节点地址怎么会错呢?
2009-7-20 17:07
0
游客
登录 | 注册 方可回帖
返回
//