首页 > 编程知识 正文

warpaffine函数,线程与进程的比较

时间:2023-05-05 09:27:21 阅读:60044 作者:379

目录

KernelBase.dll - TerminateThread

Ntkrnlpa.exe - NtTerminateThread

PspTerminateThreadByPointer

前言

线程不会因异步调用而结束,线程会自己结束自己。 逆向分析TerminateThread论证

KernelBase.dll - TerminateThread

参数检查、环境检查后,按NtTerminateThread

Ntkrnlpa.exe - NtTerminateThread

线程handle为0时从线程KTHREAD结构的成员ApcState.Process中获取当前线程所属的进程,确定进程中的活动线程数,然后将活动线程数设置为1 (例如如果活动线程数大于或等于1 ),则运行PSPPPPS

线程handle非0时首先从handle获取线程内核对象,然后退出线程以执行当前内核的线程,或者退出自身的执行的PspTerminateThreadByPointer参数

PspTerminateThreadByPointer

函数原型

nstatuspspterminatethreadbypointer (inpethreadthread,//线程内核结构IN NTSTATUS ExitStatus,//退出代码in boolean direct termin atus

当参数DirectTerminate为1时,在当前执行线程和结束线程相同的情况下运行PspExitThread。

当参数DirectTerminate为0时报道,找不到结束线程代码,通过ExAllocatePoolWithTag申请KAPC的内存存储,调用KeInitializeApc初始化APC,然后单击Keke

线程切换和系统调用检查线程是否有APC等待处理。 如果a线程调用TerminateThread退出b线程,并且在b线程运行时检查APC队列,如果有“退出APC”,则自己退出。

从上述分析可以看出线程会自己杀自己……。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。