能力值:
( LV12,RANK:210 )
|
-
-
101 楼
APC重入原因:RP不行,电脑硬件或者系统问题  你们可以测试下95楼代码
|
能力值:
( LV12,RANK:300 )
|
-
-
102 楼
实机试了一下结束notepad.exe没蓝……
|
能力值:
( LV3,RANK:20 )
|
-
-
103 楼
APC重入,RP有什么关系..
重入,又不是系统版本不同结构体不同
|
能力值:
( LV12,RANK:760 )
|
-
-
104 楼
看了下我自己机器的ActiveThread,貌似是会有重复的几率的...主要原因是你读取的东西是可能被别人操作的东西...
用ZwQueryXX方式取thread后逐个插入试试吧
传统点比较好
|
能力值:
( LV3,RANK:20 )
|
-
-
105 楼
看了下代码,很明显有问题.
KernelKillThreadRoutine里面调用PsTerminateSystemThread,
而PsTerminateSystemThread->PspTerminateThreadByPointer->PspExitThread->结束线程前调用线程的APC,然后你的KernelKillThreadRoutine又被执行了.这样循环不就重入了吗. 
所以重入的原因在这吧.
|
能力值:
( LV12,RANK:210 )
|
-
-
106 楼
换台电脑就不重入了
|
能力值:
( LV12,RANK:210 )
|
-
-
107 楼
 不是这样解释的 你还是看看APC吧
|
能力值:
( LV3,RANK:20 )
|
-
-
108 楼
 无所谓了.
每个人都得到了自己的答案.
|
能力值:
( LV12,RANK:300 )
|
-
-
109 楼
按我的理解,如果没有重复插入APC,那么KeDeliverApc调用KernelKillThreadRoutine时相应KAPC结构已经被从链表上脱链了(因此在KernelKillThreadRoutine中可以直接ExFreePool释放其所占的空间),因此进入KernelKillThreadRoutine后调用PsTerminateSystemThread,线程退出时再调用KeDeliverApc时,ApcStates链表上应该已经没有KernelRoutine为KernelKillThreadRoutine的表项了,就不会重入。而如果重复插入使得链表上有多个KernelRoutine为KernelKillThreadRoutine的表项,当第一个这样的表项被KeDeliverApc取出并调用时,就会导致重入。但似乎也不会无限循环啊,还是说重复插入的表项实在太多使得还没有调用完之前堆栈就爆了?从dump文件中看真是重入了N多回啊……
|
能力值:
( LV12,RANK:760 )
|
-
-
110 楼
我个人认为 用了ActiveThreadList而不是传统方式导致的
传统方式获得线程插入APC貌似没啥问题~
|
能力值:
( LV6,RANK:90 )
|
-
-
111 楼
这个是正确的。
.text:00426160 mov ecx, [eax] // 链表脱钩
.text:00426162 mov eax, [eax+4]
.text:00426165 mov [eax], ecx
.text:00426167 mov [ecx+4], eax
.text:0042616A lea ecx, [ebp+LockHandle] ; LockHandle
.text:0042616D mov byte ptr [edi+2Eh], 0
.text:00426171 call ds:__imp_@KeReleaseInStackQueuedSpinLock@4 ; KeReleaseInStackQueuedSpinLock(x)
.text:00426177 lea eax, [ebp+var_8]
.text:0042617A push eax
.text:0042617B lea eax, [ebp+var_C]
.text:0042617E push eax
.text:0042617F lea eax, [ebp+var_10]
.text:00426182 push eax
.text:00426183 lea eax, [ebp+var_4]
.text:00426186 push eax
.text:00426187 push edi
.text:00426188 call [ebp+var_14] //调用KernelKillThreadRoutine
正常情况是不应该重入的,不过当ActiveThread的值很大或者重复调用KillProcessWithApc就有会重入。
但是把ActiveThread改成很大会有副作用吗,期待牛人解答~
|
能力值:
( LV2,RANK:10 )
|
-
-
112 楼
膜拜
|
能力值:
( LV12,RANK:210 )
|
-
-
113 楼
膜拜啊
|
能力值:
( LV2,RANK:10 )
|
-
-
114 楼
膜拜mj
|
能力值:
( LV2,RANK:10 )
|
-
-
115 楼
顶顶顶顶顶顶
|
能力值:
( LV2,RANK:10 )
|
-
-
116 楼
mj真是好人。
|
能力值:
( LV3,RANK:20 )
|
-
-
117 楼
ExFreePool(ExitApc); //释放内存,防止内存泄露*/
这句有问题啊
取掉这句
|
能力值:
( LV2,RANK:10 )
|
-
-
118 楼
mj is who
|
|
|