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

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

2009-7-20 14:45
34413
收藏
免费 7
支持
分享
最新回复 (117)
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
51
Map Fastfat.SYS:
  Image region 1f880:2180 does not fit in mapping
*** WARNING: Unable to verify timestamp for Listprocess.sys
Probably caused by : Listprocess.sys ( Listprocess!KernelKillThreadRoutine+39 )
2009-7-20 20:51
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
52
STACK_COMMAND:  kb

FOLLOWUP_IP:
Listprocess!KernelKillThreadRoutine+39 [d:\sysdog\listprocess\listprocess.c @ 902]
f77f96d9 ??              ???

FAULTING_SOURCE_CODE:  
   898:         {
   899:                 *ThreadFlags=(*ThreadFlags) | PS_CROSS_THREAD_FLAGS_SYSTEM; //DT???a?¦Ì¨ª3¨¨¡§?T
   900:             PsTerminateSystemThread(STATUS_SUCCESS); //?¨¢¨º???3¨¬
   901:         }
>  902: }
   903:
   904: ULONG GetKtosKerlAddress()
   905: {   
   906:         NTSTATUS status;
   907:         PVOID buffer;

SYMBOL_STACK_INDEX:  6

SYMBOL_NAME:  Listprocess!KernelKillThreadRoutine+39

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: Listprocess

IMAGE_NAME:  Listprocess.sys

BUCKET_ID:  WRONG_SYMBOLS

Followup: MachineOwner
---------
2009-7-20 20:56
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
53
显示 } 一行错误
2009-7-20 20:56
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
54
这次函数地址没错 不知道什么原因呢?
2009-7-20 21:09
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
55
杀冰刃就蓝屏呢
2009-7-20 21:28
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
56
没DUMP光贴那点东西不行
2009-7-21 00:09
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
57
上传DUMP
2009-7-21 01:19
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
58
虚拟机测试杀冰刃蓝屏
本机杀任何进程都蓝屏
2009-7-21 01:46
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
59
APC重入导致堆栈溢出了。

这些东西不是想当然的乱调用就可以的
2009-7-21 03:48
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
60
APC重入是什么意思呢?不是往线程插入一个特殊内核模式APC例程  线程就执行APC例程 调用PsTerminateSystemThread结束自己
2009-7-21 11:06
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
61
呵呵,重入问题,我原来弄APC时没遇到过~~~~

MJ的回答很细致,值得大家学习~
2009-7-21 11:25
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
62
怎样修改才不会导致APC重入呢
2009-7-21 12:11
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
63
大家都要向MJ学习啊  
2009-7-21 12:12
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
64
这个帖子 应该标记为"关注" ,供后来者参考学习~
2009-7-21 15:47
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
65
看到第二页我就猜是楼主内核文件找错了(不是ntoskrnl.exe而是ntkrnlpa.exe)翻到第三页果然如此
2009-7-21 16:03
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
66
从堆栈上看是:
Listprocess!KernelKillThreadRoutine->PsTerminateSystemThread->PspTerminateThreadByPointer->PspExitThread->hal!HalRequestSoftwareInterrupt->hal!HalpApcInterrupt->KiDeliverApc->Listprocess!KernelKillThreadRoutine->........

KiDeliverApc中循环处理所有Kernel Mode APCs,这其中导致重入:
804fdf35 64a124010000    mov     eax,dword ptr fs:[00000124h]
804fdf3b 8bf0            mov     esi,eax                                ; ptr _KTHREAD
804fdf65 8d5e34          lea     ebx,[esi+34h]                                ; ptr _KTHREAD.ApcState.ApcListHead[0].Flink
804fdf68 e9e1000000      jmp     nt!KiDeliverApc+0x142 (804fe04e)

804fe04e 391b            cmp     dword ptr [ebx],ebx                        ; Flink=自身?
804fe050 0f8517ffffff    jne     nt!KiDeliverApc+0x61 (804fdf6d)

804fdf6d 8b03            mov     eax,dword ptr [ebx]                        ; Flink
804fdf6f 8d78f4          lea     edi,[eax-0Ch]                                ; ptr _KAPC
804fdf72 8b4f14          mov     ecx,dword ptr [edi+14h]                ; _KAPC.KernelRoutine(==Listprocess!KernelKillThreadRoutine)
804fdf75 894dec          mov     dword ptr [ebp-14h],ecx
804fdf78 8b4f1c          mov     ecx,dword ptr [edi+1Ch]                ; _KAPC.NormalRoutine
804fdf7b 85c9            test    ecx,ecx
804fdf7d 894dfc          mov     dword ptr [ebp-4],ecx
804fdf80 8b5720          mov     edx,dword ptr [edi+20h]                ; _KAPC.NormalRoutine
804fdf83 8955f0          mov     dword ptr [ebp-10h],edx
804fdf86 8b5724          mov     edx,dword ptr [edi+24h]                ; _KAPC.SystemArgument1
804fdf89 8955f4          mov     dword ptr [ebp-0Ch],edx
804fdf8c 8b5728          mov     edx,dword ptr [edi+28h]                ; _KAPC.SystemArgument2
804fdf8f 8955f8          mov     dword ptr [ebp-8],edx
......
804fdfab 8d45f8          lea     eax,[ebp-8]
804fdfae 50              push    eax
804fdfaf 8d45f4          lea     eax,[ebp-0Ch]
804fdfb2 50              push    eax
804fdfb3 8d45f0          lea     eax,[ebp-10h]
804fdfb6 50              push    eax
804fdfb7 8d45fc          lea     eax,[ebp-4]
804fdfba 50              push    eax
804fdfbb 57              push    edi
804fdfbc ff55ec          call    dword ptr [ebp-14h]                        ; call Listprocess!KernelKillThreadRoutine!!重入了。
2009-7-21 16:14
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
67
为什么会导致APC例程重入呢?
2009-7-21 17:58
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
68
KeInitializeApc(ExitApc,
                        ethread,                         //线程
                        OriginalApcEnvironment,
                        KernelKillThreadRoutine,      //APC例程
                    NULL,
                        NULL,
                        KernelMode,
                        NULL);//为线程初始化APC
                status=KeInsertQueueApc(ExitApc,NULL,NULL,0);   //插入Apc到线程队列
2009-7-21 17:58
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
69
我也没明白,等待MJ解释
2009-7-21 18:30
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
70
等待MJ解释
2009-7-21 20:12
0
雪    币: 235
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
71
重入:在原函数Fun又递归调用原函数Fun

你的代码怎么会在KiDeliverApc又调用Listprocess!KernelKillThreadRoutine (可以看看漫谈里面的APC)
仔细看看代码,有些错误是很隐蔽的

跟着学习.
2009-7-21 20:19
0
雪    币: 235
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
72
看了一下漫谈,上面说NormalRoutine才指向请求者提供的函数
KernelRoutine在NormalRoutine为NULL的时候无条件调用.所以你的代码就重入了
NormalRoutine为非0时,先调用KernelRoutine,NormalRoutine作为参数传递下去
2009-7-21 21:00
0
雪    币: 235
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
73
毛很强大啊,找到工作之后第一时间就买本Windows情景分析.
2009-7-21 21:05
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
74
就是说这个初始化是错的
KeInitializeApc(ExitApc,
                        ethread,                         //线程
                        OriginalApcEnvironment,
                        KernelKillThreadRoutine,      //APC例程
                          NULL,
                        NULL,
                        KernelMode,
                        NULL);//为线程初始化APC
2009-7-22 02:58
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
75
NormalRoutine为0,那么实际的模式变成了KernelMode。这是因为在这种情况下没有用户空间APC函数可以执行,唯一将得到执行的是KernelRoutine
2009-7-22 03:05
0
游客
登录 | 注册 方可回帖
返回
//