34进程与线程之进程结构体

前言:操作系统创造进程和线程,实质就是构建一个结构体。

一、进程结构体EPROCESS


    使用命令查看:dt _EPROCESS
  


    

PEB也是描述进程的一个结构体,但是是提供给3环使用的,而不是0环。每个windows进程在0环都有一个对应的结构体:EPROCESS  这个结构体包含了进程所有重要的信息。

    成员之KPROCESS


        +0x000 Header           : _DISPATCHER_HEADER


            "可等待”对象,比如Mutex互斥体、Event事件等(WaitForSingleObject),只要0环结构体中以_DISPATCHER_HEADER结构体开头的都是可等待对象,特点是可使用WaitForSingleObject


        +0x018 DirectoryTableBase : [2] Uint4B


            页目录表的基址,填到CR3寄存器的值,切换进程就是把进程的DirectoryTableBase填到CR3中


        +0x038 KernelTime       : Uint4B
        +0x03c UserTime         : Uint4B


            统计信息 记录了一个进程在内核模式/用户模式下所花的时间


        +0x05c Affinity         : Uint4B


            规定进程里面的所有线程能在哪个CPU上跑,如果值为1,那这个进程的所以线程只能在0号CPU上跑(00000001)                
            如果值为3,那这个进程的所以线程能在0、1号CPU上跑(000000011)    
            如果值为4,那这个进程的所以线程能在2号CPU上跑(000000100)    
            如果值为5,那这个进程的所以线程能在0,2号CPU上跑(000000101)    
            4个字节共32位  所以最多32核 Windows64位 就64核            
            如果只有一个CPU 把这个设置为4 那么这个进程就死了


        +0x062 BasePriority     : Char


            基础优先级或最低优先级 该进程中的所有线程最起码的优先级.
    


    KPROCESS其他成员
    


        +0x070 CreateTime       : _LARGE_INTEGER            
        +0x078 ExitTime         : _LARGE_INTEGER
        进程的创建/退出时间

        +0x084 UniqueProcessId  : Ptr32 Void
        进程的编号 任务管理器中的PID

        +0x088 ActiveProcessLinks : _LIST_ENTRY
        双向链表 所有的活动进程都连接在一起,构成了一个链表
        PsActiveProcessHead指向全局链表头
        
        dd PsActiveProcessHead


        我们可以查看写链表的第一个成员进程
        
        0x090 QuotaUsage        : [3] Uint4B                
        +0x09c QuotaPeak        : [3] Uint4B    
        物理页相关的统计信息

        +0x0a8 CommitCharge     : Uint4B                
        +0x0ac PeakVirtualSize  : Uint4B                
        +0x0b0 VirtualSize      : Uint4B
        虚拟内存相关的统计信息

        +0x11c VadRoot          : Ptr32 Void
        指向了一颗平衡二叉树,表示0-2G内存地址分配使用情况
        
        +0x0bc DebugPort        : Ptr32 Void
        +0x0c0 ExceptionPort    : Ptr32 Void     
        调试相关,DebugPort清0可以防止反调试,断开调试器与被调试进程的桥梁

        +0x0c4 ObjectTable      : Ptr32 _HANDLE_TABLE
        句柄表(使用0环的一个对象,句柄表计数加一)
        可以遍历系统所有进程的句柄表,发现自己的进程的EPROCESS的值,
        则说明自己处于调试阶段。也可用此方法实现反调试

        +0x174 ImageFileName    : [16] UChar
        进程镜像文件名 最多16个字节
        24分钟
        +0x1a0 ActiveThreads    : Uint4B
        活动线程的数量
        
        +0x1b0 Peb              : Ptr32 _PEB

        PEB((Process Environment Block 进程环境块):进程在3环的一个结构体,里面包含了进程的模块列表、是否处于调试状态等信息。
        
        

        

            

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值