于PsIsSystemThread无论是在线程系统线程标识获得
; Attributes: bp-based frame; __stdcall PsIsSystemThread(x)public _PsIsSystemThread@4_PsIsSystemThread@4 proc neararg_0= dword ptr 8mov edi, edi ; IoIsSystemThreadpush ebpmov ebp, espmov eax, [ebp+arg_0]mov eax, [eax+248h]shr eax, 4and al, 1pop ebpretn 4_PsIsSystemThread@4 endp
char __stdcall PsIsSystemThread(int a1){return (*(_DWORD *)(a1 + 0x248) >> 4) & 1;}
PsIsSystemThread routine
The PsIsSystemThread routine checks whether a given thread is a system thread.
Syntax
BOOLEAN PsIsSystemThread(
_In_ PETHREAD Thread
);
Parameters
- Thread [in]
-
Pointer to the thread to be checked.
Return value
PsIsSystemThread returns TRUE if the specified thread is a system thread, FALSE otherwise.
nt!_ETHREAD+0x000 Tcb : _KTHREAD+0x1c0 CreateTime : _LARGE_INTEGER+0x1c0 NestedFaultCount : Pos 0, 2 Bits+0x1c0 ApcNeeded : Pos 2, 1 Bit+0x1c8 ExitTime : _LARGE_INTEGER+0x1c8 LpcReplyChain : _LIST_ENTRY+0x1c8 KeyedWaitChain : _LIST_ENTRY+0x1d0 ExitStatus : Int4B+0x1d0 OfsChain : Ptr32 Void+0x1d4 PostBlockList : _LIST_ENTRY+0x1dc TerminationPort : Ptr32 _TERMINATION_PORT+0x1dc ReaperLink : Ptr32 _ETHREAD+0x1dc KeyedWaitValue : Ptr32 Void+0x1e0 ActiveTimerListLock : Uint4B+0x1e4 ActiveTimerListHead : _LIST_ENTRY+0x1ec Cid : _CLIENT_ID+0x1f4 LpcReplySemaphore : _KSEMAPHORE+0x1f4 KeyedWaitSemaphore : _KSEMAPHORE+0x208 LpcReplyMessage : Ptr32 Void+0x208 LpcWaitingOnPort : Ptr32 Void+0x20c ImpersonationInfo : Ptr32 _PS_IMPERSONATION_INFORMATION+0x210 IrpList : _LIST_ENTRY+0x218 TopLevelIrp : Uint4B+0x21c DeviceToVerify : Ptr32 _DEVICE_OBJECT+0x220 ThreadsProcess : Ptr32 _EPROCESS+0x224 StartAddress : Ptr32 Void+0x228 Win32StartAddress : Ptr32 Void+0x228 LpcReceivedMessageId : Uint4B+0x22c ThreadListEntry : _LIST_ENTRY+0x234 RundownProtect : _EX_RUNDOWN_REF+0x238 ThreadLock : _EX_PUSH_LOCK+0x23c LpcReplyMessageId : Uint4B+0x240 ReadClusterSize : Uint4B+0x244 GrantedAccess : Uint4B+0x248 CrossThreadFlags : Uint4B+0x248 Terminated : Pos 0, 1 Bit+0x248 DeadThread : Pos 1, 1 Bit+0x248 HideFromDebugger : Pos 2, 1 Bit+0x248 ActiveImpersonationInfo : Pos 3, 1 Bit+0x248 SystemThread : Pos 4, 1 Bit+0x248 HardErrorsAreDisabled : Pos 5, 1 Bit+0x248 BreakOnTermination : Pos 6, 1 Bit+0x248 SkipCreationMsg : Pos 7, 1 Bit+0x248 SkipTerminationMsg : Pos 8, 1 Bit+0x24c SameThreadPassiveFlags : Uint4B+0x24c ActiveExWorker : Pos 0, 1 Bit+0x24c ExWorkerCanWaitUser : Pos 1, 1 Bit+0x24c MemoryMaker : Pos 2, 1 Bit+0x250 SameThreadApcFlags : Uint4B+0x250 LpcReceivedMsgIdValid : Pos 0, 1 Bit+0x250 LpcExitThreadCalled : Pos 1, 1 Bit+0x250 AddressSpaceOwner : Pos 2, 1 Bit+0x254 ForwardClusterOnly : UChar+0x255 DisablePageFaultClustering : UChar
BOOLEAN PsIsSystemThread(_In_ PETHREAD Thread);

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb2NhaWp1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
lkd> uf PsIsSystemThreadnt!IoIsSystemThread:804ef8a2 8bff mov edi,edi804ef8a4 55 push ebp804ef8a5 8bec mov ebp,esp804ef8a7 8b4508 mov eax,dword ptr [ebp+8]804ef8aa 8b8048020000 mov eax,dword ptr [eax+248h]804ef8b0 c1e804 shr eax,4804ef8b3 2401 and al,1804ef8b5 5d pop ebp804ef8b6 c20400 ret 4
BOOLEAN PsIsSystemThread(PETHREAD Thread);dprintf("PsIsSystemThread:0X%08X\n", (PULONG)pPsIsSystemThread);
通过x nt!PsIsSystemThread看看结果,得到函数真实地址。函数真实地址的地方是不是FF 25
lkd> uf PsIsSystemThreadnt!IoIsSystemThread:804ef8a2 8bff mov edi,edi804ef8a4 55 push ebp804ef8a5 8bec mov ebp,esp804ef8a7 8b4508 mov eax,dword ptr [ebp+8]804ef8aa 8b8048020000 mov eax,dword ptr [eax+248h]804ef8b0 c1e804 shr eax,4804ef8b3 2401 and al,1804ef8b5 5d pop ebp804ef8b6 c20400 ret 4
BOOLEAN PsIsSystemThread(PETHREAD Thread);BOOLEAN IoIsSystemThread(PETHREAD Thread);dprintf("PsIsSystemThread:0X%08X\n", (PULONG)pPsIsSystemThread);dprintf("IoIsSystemThread:0X%08X\n", (PULONG)pIoIsSystemThread);
PsIsSystemThread:0XF8C2055CIoIsSystemThread:0XF8C20550lkd> u 0xf8c2055cf8c2055c ff259c06c2f8 jmp dword ptr ds:[0F8C2069Ch]f8c20562 cc int 3f8c20563 cc int 3f8c20564 cc int 3f8c20565 cc int 3f8c20566 cc int 3f8c20567 cc int 3f8c20568 ff25a806c2f8 jmp dword ptr ds:[0F8C206A8h]lkd> u f8c20550f8c20550 ff259806c2f8 jmp dword ptr ds:[0F8C20698h]f8c20556 cc int 3f8c20557 cc int 3f8c20558 cc int 3f8c20559 cc int 3f8c2055a cc int 3f8c2055b cc int 3f8c2055c ff259c06c2f8 jmp dword ptr ds:[0F8C2069Ch]dword ptr ds:[0F8C2069Ch] = dword ptr ds:[0F8C20698h] = 804ef8a2
t=93742
ULONG GetCrossThreadFlagOffset(){ULONG Offset = 0;PUCHAR pPsIsSystemThread;PULONG pFuncAddr;PUCHAR pFeature;if(Offset == 0){pPsIsSystemThread = (PUCHAR)PsIsSystemThread;}dprintf("PsIsSystemThread:0X%08X\n", (PULONG)pPsIsSystemThread);//推断是不是FF 25if ((*pPsIsSystemThread) != 0xFF || *(pPsIsSystemThread+1) != 0X25){dprintf("pProc is not ff 25.\n");return Offset;}//ff25 9806c2f8 jmp dword ptr ds:[0F8C20698h]pFuncAddr = (*(PULONG)(pPsIsSystemThread+2));dprintf("pFuncAddr:0X%08X\n", (PULONG)pFuncAddr);pFuncAddr = (PULONG)*pFuncAddr;dprintf("pFuncAddr:0X%08X\n", (PULONG)pFuncAddr);pFeature = (PUCHAR)pFuncAddr;while( *pFeature!=0x8B || *(pFeature+1)!=0x80 )pFeature++;dprintf("Instruction found in address:0X%08X\n",(PULONG)pFeature);Offset = *(PULONG)(pFeature+2);dprintf("Offset:0X%08X\n",Offset);return Offset;}
版权声明:本文博主原创文章。博客,未经同意不得转载。
于PsIsSystemThread无论是在线程系统线程标识获得的更多相关文章
- jstack工具查看系统线程问题
背景: 最近在做项目系统的异常测试,项目依赖于nkv,需要模拟依赖组件nkv异常时系统的响应及性能情况.通过tc工具模拟当服务器发送到nkv的请求超时时系统的响应.发现接口返回错误率100%,查看服务 ...
- 从零开始山寨Caffe·肆:线程系统
不精通多线程优化的程序员,不是好程序员,连码农都不是. ——并行计算时代掌握多线程的重要性 线程与操作系统 用户线程与内核线程 广义上线程分为用户线程和内核线程. 前者已经绝迹,它一般只存在于早期不支 ...
- 《Windows内核编程》---系统线程和同步事件
系统线程: 在驱动中生成的线程一般是系统线程,系统线程所在的进程名为“System”,用到的内核API函数是: NTSTATUS PsCreateSystemThread( OUT PHANDLE T ...
- linux系统——线程
linux系统线程 1 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者.传统的Unix也支持线程的概念,但是在一个 ...
- 记一次 医院.NET公众号系统 线程CPU双高分析
一:背景 1. 讲故事 上周四有位朋友加wx咨询他的程序出现 CPU + 线程 双高的情况,希望我能帮忙排查下,如下图: 从截图看只是线程爆高,没看到 cpu 爆高哈,有意思的是这位朋友说他: 一直在 ...
- 记一次 .NET 某新能源系统 线程疯涨 分析
一:背景 1. 讲故事 前段时间收到一个朋友的求助,说他的程序线程数疯涨,寻求如何解决. 等我分析完之后,我觉得这个问题很有代表性,所以拿出来和大家分享下,还是上老工具 WinDbg. 二: WinD ...
- 第21章 java线程(1)-线程初步
java线程(1)-线程初步 1.并行和并发 并行和并发是即相似又有区别: 并行:指两个或者多个事件在同一时刻点发生. 并发:指两个或多个事件在同一时间段内发生 在操作系统中,并发性是指在一段事件内宏 ...
- 基础学习day12--多线程一线程之间的通信和常用方法
一.线程之间的通信 1.1.线程之间的通信方法 多个线程在处理统一资源,但是任务却不同,这时候就需要线程间通信. 等待/唤醒机制涉及的方法: 1. wait():让线程处于冻结状态,被wa ...
- 线程、线程句柄、线程ID
什么是句柄:句柄是一种指向指针的指针.我们知道,所谓指针是一种内存地址.应用程序启动后,组成这个程序的各对象是住留在内存的.如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址 ...
随机推荐
- C++出现计算机术语5
class template(类模板) 可以用来定义一个类定义了一组特定类型的类的.类模板template keyword其次是尖括号(<>)附上.的列表来定义. export keywo ...
- oracle分区表运行计划
分区表有非常多优点,以大化小,一小化了,加上并行的使用,在loap中能往往能提高几十倍甚至几百倍的效果. 当然表设计得不好也会适得其反.效果比普通表跟糟糕. 为了更好的使用分区表,这里看一下分区表的运 ...
- FREESWITCH SEESION
SESSION SESSION为FS的核心概念之一,所以需要拿出来专门的分析下. 从以下几个方面进行分析,结构类型,资源的管理,对于呼叫的意义,规格. 1.结构类型 每一次呼叫会申请一个session ...
- GNU名称解析
GNU它是GNU's NOT UNIX缩写G N U缩写,和GNU全名GNU's NOT UNIX 中间 GNU 也GNU's NOT UNIX缩写,它使用递归方式定义GNU.
- Sencha Architect 2 的使用
俗话说的好, 工欲善其事必先利其器, 用Sencha开发的语言, 自己可能不太熟悉, 写出来很麻烦, 于是给大家介绍一个工具. 启动程序第一个界面: 单击第一个Go按钮, 创建一个项目.进入以后, 单 ...
- Linux:闪光的宝石,智慧 (在)
Linux:闪光的宝石,智慧的结晶(上) 老实说,这十几天以来.因为我违反了"家规",又被断网处罚(拔掉网线).没收手机与老年证(不许出家门). 因此.我平日里仅仅能面对一篇文章& ...
- Cocos2d-x实现简单的翻牌效果
触发器互联网影响找了很多.有自己的点重写一个复杂的sprite类来实现.简单的操作来对引擎的使用CCOrbitCamera实现,但是,也存在一些问题,后变反了. 我在用的仅仅是一个简单的翻牌效果,点击 ...
- delegate实现Javascript的each方法
C#如何用delegate实现Javascript的each方法 C#中有很多易混淆的关键词,例如delegate,Func, Action和 Predicate.Func, Action和 Pr ...
- hdu 2899 hdu 3400 三分/几何
hdu2899 : 水提,直接三分,事实上求导后二分也能够. #include<iostream> #include<cstdio> using namespace std; ...
- 【Web探索之旅】第四部分:Web程序员
内容简介 1.第四部分第一课:什么是Web程序员? 2.第四部分第二课:如何成为Web程序员? 3.第四部分第三课:成为优秀Web程序员的秘诀 第四部分:Web程序员(完结篇) 大家好.终于来到了[W ...