精华内容
下载资源
问答
  • 00 进程结构体

    2019-02-15 11:39:10
    进程和线程在操作系统中...每个Windows进程在0环都有一个对应的机构体EPROCESS,这个结构体包含了进程所有重要的信息。 windbug中查看该结构体的指令:dt _EPROCESS kd> dt _EPROCESS nt!_EPROCESS +0x000 ...

    进程和线程在操作系统中就是一个结构体,当操作系统向创建一个进程或者一个线程,本质上就是在一块内存中填充一个结构体。
    1、进程结构体EPROCESS
    每个Windows进程在0环都有一个对应的机构体EPROCESS,这个结构体包含了进程所有重要的信息。
    windbug中查看该结构体的指令:dt _EPROCESS

    kd> dt _EPROCESS
    nt!_EPROCESS
       +0x000 Pcb              : _KPROCESS
       
       +0x000 Header           : _DISPATCHER_HEADER
       +0x010 ProfileListHead  : _LIST_ENTRY
       +0x018 DirectoryTableBase : [2] Uint4B
       +0x020 LdtDescriptor    : _KGDTENTRY
       +0x028 Int21Descriptor  : _KIDTENTRY
       +0x030 IopmOffset       : Uint2B
       +0x032 Iopl             : UChar
       +0x033 Unused           : UChar
       +0x034 ActiveProcessors : Uint4B
       +0x038 KernelTime       : Uint4B
       +0x03c UserTime         : Uint4B
       +0x040 ReadyListHead    : _LIST_ENTRY
       +0x048 SwapListEntry    : _SINGLE_LIST_ENTRY
       +0x04c VdmTrapcHandler  : Ptr32 Void
       +0x050 ThreadListHead   : _LIST_ENTRY
       +0x058 ProcessLock      : Uint4B
       +0x05c Affinity         : Uint4B
       +0x060 StackCount       : Uint2B
       +0x062 BasePriority     : Char
       +0x063 ThreadQuantum    : Char
       +0x064 AutoAlignment    : UChar
       +0x065 State            : UChar
       +0x066 ThreadSeed       : UChar
       +0x067 DisableBoost     : UChar
       +0x068 PowerState       : UChar
       +0x069 DisableQuantum   : UChar
       +0x06a IdealNode        : UChar
       +0x06b Flags            : _KEXECUTE_OPTIONS
       +0x06b ExecuteOptions   : UChar
    
    
       +0x06c ProcessLock      : _EX_PUSH_LOCK
       +0x070 CreateTime       : _LARGE_INTEGER
       +0x078 ExitTime         : _LARGE_INTEGER
       +0x080 RundownProtect   : _EX_RUNDOWN_REF
       +0x084 UniqueProcessId  : Ptr32 Void
       +0x088 ActiveProcessLinks : _LIST_ENTRY
       +0x090 QuotaUsage       : [3] Uint4B
       +0x09c QuotaPeak        : [3] Uint4B
       +0x0a8 CommitCharge     : Uint4B
       +0x0ac PeakVirtualSize  : Uint4B
       +0x0b0 VirtualSize      : Uint4B
       +0x0b4 SessionProcessLinks : _LIST_ENTRY
       +0x0bc DebugPort        : Ptr32 Void
       +0x0c0 ExceptionPort    : Ptr32 Void
       +0x0c4 ObjectTable      : Ptr32 _HANDLE_TABLE
       +0x0c8 Token            : _EX_FAST_REF
       +0x0cc WorkingSetLock   : _FAST_MUTEX
       +0x0ec WorkingSetPage   : Uint4B
       +0x0f0 AddressCreationLock : _FAST_MUTEX
       +0x110 HyperSpaceLock   : Uint4B
       +0x114 ForkInProgress   : Ptr32 _ETHREAD
       +0x118 HardwareTrigger  : Uint4B
       +0x11c VadRoot          : Ptr32 Void
       +0x120 VadHint          : Ptr32 Void
       +0x124 CloneRoot        : Ptr32 Void
       +0x128 NumberOfPrivatePages : Uint4B
       +0x12c NumberOfLockedPages : Uint4B
       +0x130 Win32Process     : Ptr32 Void
       +0x134 Job              : Ptr32 _EJOB
       +0x138 SectionObject    : Ptr32 Void
       +0x13c SectionBaseAddress : Ptr32 Void
       +0x140 QuotaBlock       : Ptr32 _EPROCESS_QUOTA_BLOCK
       +0x144 WorkingSetWatch  : Ptr32 _PAGEFAULT_HISTORY
       +0x148 Win32WindowStation : Ptr32 Void
       +0x14c InheritedFromUniqueProcessId : Ptr32 Void
       +0x150 LdtInformation   : Ptr32 Void
       +0x154 VadFreeHint      : Ptr32 Void
       +0x158 VdmObjects       : Ptr32 Void
       +0x15c DeviceMap        : Ptr32 Void
       +0x160 PhysicalVadList  : _LIST_ENTRY
       +0x168 PageDirectoryPte : _HARDWARE_PTE
       +0x168 Filler           : Uint8B
       +0x170 Session          : Ptr32 Void
       +0x174 ImageFileName    : [16] UChar
       +0x184 JobLinks         : _LIST_ENTRY
       +0x18c LockedPagesList  : Ptr32 Void
       +0x190 ThreadListHead   : _LIST_ENTRY
       +0x198 SecurityPort     : Ptr32 Void
       +0x19c PaeTop           : Ptr32 Void
       +0x1a0 ActiveThreads    : Uint4B
       +0x1a4 GrantedAccess    : Uint4B
       +0x1a8 DefaultHardErrorProcessing : Uint4B
       +0x1ac LastThreadExitStatus : Int4B
       +0x1b0 Peb              : Ptr32 _PEB
       +0x1b4 PrefetchTrace    : _EX_FAST_REF
       +0x1b8 ReadOperationCount : _LARGE_INTEGER
       +0x1c0 WriteOperationCount : _LARGE_INTEGER
       +0x1c8 OtherOperationCount : _LARGE_INTEGER
       +0x1d0 ReadTransferCount : _LARGE_INTEGER
       +0x1d8 WriteTransferCount : _LARGE_INTEGER
       +0x1e0 OtherTransferCount : _LARGE_INTEGER
       +0x1e8 CommitChargeLimit : Uint4B
       +0x1ec CommitChargePeak : Uint4B
       +0x1f0 AweInfo          : Ptr32 Void
       +0x1f4 SeAuditProcessCreationInfo : _SE_AUDIT_PROCESS_CREATION_INFO
       +0x1f8 Vm               : _MMSUPPORT
       +0x238 LastFaultCount   : Uint4B
       +0x23c ModifiedPageCount : Uint4B
       +0x240 NumberOfVads     : Uint4B
       +0x244 JobStatus        : Uint4B
       +0x248 Flags            : Uint4B
       +0x248 CreateReported   : Pos 0, 1 Bit
       +0x248 NoDebugInherit   : Pos 1, 1 Bit
       +0x248 ProcessExiting   : Pos 2, 1 Bit
       +0x248 ProcessDelete    : Pos 3, 1 Bit
       +0x248 Wow64SplitPages  : Pos 4, 1 Bit
       +0x248 VmDeleted        : Pos 5, 1 Bit
       +0x248 OutswapEnabled   : Pos 6, 1 Bit
       +0x248 Outswapped       : Pos 7, 1 Bit
       +0x248 ForkFailed       : Pos 8, 1 Bit
       +0x248 HasPhysicalVad   : Pos 9, 1 Bit
       +0x248 AddressSpaceInitialized : Pos 10, 2 Bits
       +0x248 SetTimerResolution : Pos 12, 1 Bit
       +0x248 BreakOnTermination : Pos 13, 1 Bit
       +0x248 SessionCreationUnderway : Pos 14, 1 Bit
       +0x248 WriteWatch       : Pos 15, 1 Bit
       +0x248 ProcessInSession : Pos 16, 1 Bit
       +0x248 OverrideAddressSpace : Pos 17, 1 Bit
       +0x248 HasAddressSpace  : Pos 18, 1 Bit
       +0x248 LaunchPrefetched : Pos 19, 1 Bit
       +0x248 InjectInpageErrors : Pos 20, 1 Bit
       +0x248 VmTopDown        : Pos 21, 1 Bit
       +0x248 Unused3          : Pos 22, 1 Bit
       +0x248 Unused4          : Pos 23, 1 Bit
       +0x248 VdmAllowed       : Pos 24, 1 Bit
       +0x248 Unused           : Pos 25, 5 Bits
       +0x248 Unused1          : Pos 30, 1 Bit
       +0x248 Unused2          : Pos 31, 1 Bit
       +0x24c ExitStatus       : Int4B
       +0x250 NextPageColor    : Uint2B
       +0x252 SubSystemMinorVersion : UChar
       +0x253 SubSystemMajorVersion : UChar
       +0x252 SubSystemVersion : Uint2B
       +0x254 PriorityClass    : UChar
       +0x255 WorkingSetAcquiredUnsafe : UChar
       +0x258 Cookie           : Uint4B
    
    

    2、KPROCESS结构体主要成员
    +0x000 Header : _DISPATCHER_HEADER
    “可等待”对象,比如Mutex互斥体、Event对象等(WaitForSingleObject)
    +0x018 DirectoryTableBase : [2] Uint4B
    页目录表基址,整个进程中最重要的成员,这个值就是最终加载到CR3里的值
    +0x038 KernelTime : Uint4B
    +0x03c UserTime : Uint4B
    统计信息,记录一个进程在内核模式/用户模式运行的时间
    +0x05c Affinity : Uint4B
    规定了进程中所有的线程只能在哪个CPU上跑,如果值为1,那么这个进程的所有线程只能在0号CPU上跑(0000 0001)
    如果为3可以在0、1上跑(0000000011)
    如果为4则在能在2号上跑
    如果只有一个CPU 把这个CPU设置为4 那么这个进程就死了
    +0x062 BasePriority : Char
    基础优先级或最低优先级,该进程中所有的线程最起码的优先级

    3、EPROCESS其他成员
    +0x070 CreateTime : _LARGE_INTEGER
    +0x078 ExitTime : _LARGE_INTEGER
    进程创建时间和退出时间
    +0x084 UniqueProcessId : Ptr32 Void
    进程的编号,任务管理器里的PID
    +0x088 ActiveProcessLinks : _LIST_ENTRY
    双向链表,所有活动进程都连到一起,构成一个活动进程链表
    PsActiveProcessHead指向全局链表头
    windbug下查看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
    调试相关
    +0x0c4 ObjectTable : Ptr32 _HANDLE_TABLE
    句柄表
    +0x174 ImageFileName : [16] UChar
    进程镜像文件名 最多16字节
    +0x1a0 ActiveThreads : Uint4B
    活动线程数量
    +0x1b0 Peb : Ptr32 _PEB
    3环进程结构体

    kd> dt _PEB
    ntdll!_PEB
       +0x000 InheritedAddressSpace : UChar
       +0x001 ReadImageFileExecOptions : UChar
       +0x002 BeingDebugged    : UChar
       +0x003 SpareBool        : UChar
       +0x004 Mutant           : Ptr32 Void
       +0x008 ImageBaseAddress : Ptr32 Void
       +0x00c Ldr              : Ptr32 _PEB_LDR_DATA
       +0x010 ProcessParameters : Ptr32 _RTL_USER_PROCESS_PARAMETERS
       +0x014 SubSystemData    : Ptr32 Void
       +0x018 ProcessHeap      : Ptr32 Void
       +0x01c FastPebLock      : Ptr32 _RTL_CRITICAL_SECTION
       +0x020 FastPebLockRoutine : Ptr32 Void
       +0x024 FastPebUnlockRoutine : Ptr32 Void
       +0x028 EnvironmentUpdateCount : Uint4B
       +0x02c KernelCallbackTable : Ptr32 Void
       +0x030 SystemReserved   : [1] Uint4B
       +0x034 AtlThunkSListPtr32 : Uint4B
       +0x038 FreeList         : Ptr32 _PEB_FREE_BLOCK
       +0x03c TlsExpansionCounter : Uint4B
       +0x040 TlsBitmap        : Ptr32 Void
       +0x044 TlsBitmapBits    : [2] Uint4B
       +0x04c ReadOnlySharedMemoryBase : Ptr32 Void
       +0x050 ReadOnlySharedMemoryHeap : Ptr32 Void
       +0x054 ReadOnlyStaticServerData : Ptr32 Ptr32 Void
       +0x058 AnsiCodePageData : Ptr32 Void
       +0x05c OemCodePageData  : Ptr32 Void
       +0x060 UnicodeCaseTableData : Ptr32 Void
       +0x064 NumberOfProcessors : Uint4B
       +0x068 NtGlobalFlag     : Uint4B
       +0x070 CriticalSectionTimeout : _LARGE_INTEGER
       +0x078 HeapSegmentReserve : Uint4B
       +0x07c HeapSegmentCommit : Uint4B
       +0x080 HeapDeCommitTotalFreeThreshold : Uint4B
       +0x084 HeapDeCommitFreeBlockThreshold : Uint4B
       +0x088 NumberOfHeaps    : Uint4B
       +0x08c MaximumNumberOfHeaps : Uint4B
       +0x090 ProcessHeaps     : Ptr32 Ptr32 Void
       +0x094 GdiSharedHandleTable : Ptr32 Void
       +0x098 ProcessStarterHelper : Ptr32 Void
       +0x09c GdiDCAttributeList : Uint4B
       +0x0a0 LoaderLock       : Ptr32 Void
       +0x0a4 OSMajorVersion   : Uint4B
       +0x0a8 OSMinorVersion   : Uint4B
       +0x0ac OSBuildNumber    : Uint2B
       +0x0ae OSCSDVersion     : Uint2B
       +0x0b0 OSPlatformId     : Uint4B
       +0x0b4 ImageSubsystem   : Uint4B
       +0x0b8 ImageSubsystemMajorVersion : Uint4B
       +0x0bc ImageSubsystemMinorVersion : Uint4B
       +0x0c0 ImageProcessAffinityMask : Uint4B
       +0x0c4 GdiHandleBuffer  : [34] Uint4B
       +0x14c PostProcessInitRoutine : Ptr32     void 
       +0x150 TlsExpansionBitmap : Ptr32 Void
       +0x154 TlsExpansionBitmapBits : [32] Uint4B
       +0x1d4 SessionId        : Uint4B
       +0x1d8 AppCompatFlags   : _ULARGE_INTEGER
       +0x1e0 AppCompatFlagsUser : _ULARGE_INTEGER
       +0x1e8 pShimData        : Ptr32 Void
       +0x1ec AppCompatInfo    : Ptr32 Void
       +0x1f0 CSDVersion       : _UNICODE_STRING
       +0x1f8 ActivationContextData : Ptr32 Void
       +0x1fc ProcessAssemblyStorageMap : Ptr32 Void
       +0x200 SystemDefaultActivationContextData : Ptr32 Void
       +0x204 SystemAssemblyStorageMap : Ptr32 Void
       +0x208 MinimumStackCommit : Uint4B
    
    

    +0x002 BeingDebugged : UChar
    调试相关

    kd> dt _PEB_LDR_DATA
    ntdll!_PEB_LDR_DATA
       +0x000 Length           : Uint4B
       +0x004 Initialized      : UChar
       +0x008 SsHandle         : Ptr32 Void
       +0x00c InLoadOrderModuleList : _LIST_ENTRY
       +0x014 InMemoryOrderModuleList : _LIST_ENTRY
       +0x01c InInitializationOrderModuleList : _LIST_ENTRY
       +0x024 EntryInProgress  : Ptr32 Void
    
    

    +0x00c InLoadOrderModuleList : _LIST_ENTRY
    +0x014 InMemoryOrderModuleList : _LIST_ENTRY
    +0x01c InInitializationOrderModuleList : _LIST_ENTRY
    模块加载相关链表

    展开全文
  • Windows进程与线程学习笔记()—— 进程结构体&线程结构体前言进程结构体 前言 、学习自滴水编程达人中级班课程,官网:https://bcdaren.com 二、海东老师牛逼! 进程结构体 ...

    进程结构体

    EPROCESS

    描述

    1. 每个windows进程在0环都有一个EPROCESS结构体
    2. 这个结构体包含了进程所有的重要信息

    在WinDbg中查看

    kd> dt _EPROCESS

    ntdll!_EPROCESS
       +0x000 Pcb              : _KPROCESS
       +0x06c ProcessLock      : _EX_PUSH_LOCK
       +0x070 CreateTime       : _LARGE_INTEGER
       +0x078 ExitTime         : _LARGE_INTEGER
       +0x080 RundownProtect   : _EX_RUNDOWN_REF
       +0x084 UniqueProcessId  : Ptr32 Void
       +0x088 ActiveProcessLinks : _LIST_ENTRY
       +0x090 QuotaUsage       : [3] Uint4B
       +0x09c QuotaPeak        : [3] Uint4B
       +0x0a8 CommitCharge     : Uint4B
       +0x0ac PeakVirtualSize  : Uint4B
       +0x0b0 VirtualSize      : Uint4B
       +0x0b4 SessionProcessLinks : _LIST_ENTRY
       +0x0bc DebugPort        : Ptr32 Void
       +0x0c0 ExceptionPort    : Ptr32 Void
       +0x0c4 ObjectTable      : Ptr32 _HANDLE_TABLE
       +0x0c8 Token            : _EX_FAST_REF
       +0x0cc WorkingSetLock   : _FAST_MUTEX
       +0x0ec WorkingSetPage   : Uint4B
       +0x0f0 AddressCreationLock : _FAST_MUTEX
       +0x110 HyperSpaceLock   : Uint4B
       +0x114 ForkInProgress   : Ptr32 _ETHREAD
       +0x118 HardwareTrigger  : Uint4B
       +0x11c VadRoot          : Ptr32 Void
       +0x120 VadHint          : Ptr32 Void
       +0x124 CloneRoot        : Ptr32 Void
       +0x128 NumberOfPrivatePages : Uint4B
       +0x12c NumberOfLockedPages : Uint4B
       +0x130 Win32Process     : Ptr32 Void
       +0x134 Job              : Ptr32 _EJOB
       +0x138 SectionObject    : Ptr32 Void
       +0x13c SectionBaseAddress : Ptr32 Void
       +0x140 QuotaBlock       : Ptr32 _EPROCESS_QUOTA_BLOCK
       +0x144 WorkingSetWatch  : Ptr32 _PAGEFAULT_HISTORY
       +0x148 Win32WindowStation : Ptr32 Void
       +0x14c InheritedFromUniqueProcessId : Ptr32 Void
       +0x150 LdtInformation   : Ptr32 Void
       +0x154 VadFreeHint      : Ptr32 Void
       +0x158 VdmObjects       : Ptr32 Void
       +0x15c DeviceMap        : Ptr32 Void
       +0x160 PhysicalVadList  : _LIST_ENTRY
       +0x168 PageDirectoryPte : _HARDWARE_PTE_X86
       +0x168 Filler           : Uint8B
       +0x170 Session          : Ptr32 Void
       +0x174 ImageFileName    : [16] UChar
       +0x184 JobLinks         : _LIST_ENTRY
       +0x18c LockedPagesList  : Ptr32 Void
       +0x190 ThreadListHead   : _LIST_ENTRY
       +0x198 SecurityPort     : Ptr32 Void
       +0x19c PaeTop           : Ptr32 Void
       +0x1a0 ActiveThreads    : Uint4B
       +0x1a4 GrantedAccess    : Uint4B
       +0x1a8 DefaultHardErrorProcessing : Uint4B
       +0x1ac LastThreadExitStatus : Int4B
       +0x1b0 Peb              : Ptr32 _PEB
       +0x1b4 PrefetchTrace    : _EX_FAST_REF
       +0x1b8 ReadOperationCount : _LARGE_INTEGER
       +0x1c0 WriteOperationCount : _LARGE_INTEGER
       +0x1c8 OtherOperationCount : _LARGE_INTEGER
       +0x1d0 ReadTransferCount : _LARGE_INTEGER
       +0x1d8 WriteTransferCount : _LARGE_INTEGER
       +0x1e0 OtherTransferCount : _LARGE_INTEGER
       +0x1e8 CommitChargeLimit : Uint4B
       +0x1ec CommitChargePeak : Uint4B
       +0x1f0 AweInfo          : Ptr32 Void
       +0x1f4 SeAuditProcessCreationInfo : _SE_AUDIT_PROCESS_CREATION_INFO
       +0x1f8 Vm               : _MMSUPPORT
       +0x238 LastFaultCount   : Uint4B
       +0x23c ModifiedPageCount : Uint4B
       +0x240 NumberOfVads     : Uint4B
       +0x244 JobStatus        : Uint4B
       +0x248 Flags            : Uint4B
       +0x248 CreateReported   : Pos 0, 1 Bit
       +0x248 NoDebugInherit   : Pos 1, 1 Bit
       +0x248 ProcessExiting   : Pos 2, 1 Bit
       +0x248 ProcessDelete    : Pos 3, 1 Bit
       +0x248 Wow64SplitPages  : Pos 4, 1 Bit
       +0x248 VmDeleted        : Pos 5, 1 Bit
       +0x248 OutswapEnabled   : Pos 6, 1 Bit
       +0x248 Outswapped       : Pos 7, 1 Bit
       +0x248 ForkFailed       : Pos 8, 1 Bit
       +0x248 HasPhysicalVad   : Pos 9, 1 Bit
       +0x248 AddressSpaceInitialized : Pos 10, 2 Bits
       +0x248 SetTimerResolution : Pos 12, 1 Bit
       +0x248 BreakOnTermination : Pos 13, 1 Bit
       +0x248 SessionCreationUnderway : Pos 14, 1 Bit
       +0x248 WriteWatch       : Pos 15, 1 Bit
       +0x248 ProcessInSession : Pos 16, 1 Bit
       +0x248 OverrideAddressSpace : Pos 17, 1 Bit
       +0x248 HasAddressSpace  : Pos 18, 1 Bit
       +0x248 LaunchPrefetched : Pos 19, 1 Bit
       +0x248 InjectInpageErrors : Pos 20, 1 Bit
       +0x248 VmTopDown        : Pos 21, 1 Bit
       +0x248 Unused3          : Pos 22, 1 Bit
       +0x248 Unused4          : Pos 23, 1 Bit
       +0x248 VdmAllowed       : Pos 24, 1 Bit
       +0x248 Unused           : Pos 25, 5 Bits
       +0x248 Unused1          : Pos 30, 1 Bit
       +0x248 Unused2          : Pos 31, 1 Bit
       +0x24c ExitStatus       : Int4B
       +0x250 NextPageColor    : Uint2B
       +0x252 SubSystemMinorVersion : UChar
       +0x253 SubSystemMajorVersion : UChar
       +0x252 SubSystemVersion : Uint2B
       +0x254 PriorityClass    : UChar
       +0x255 WorkingSetAcquiredUnsafe : UChar
       +0x258 Cookie           : Uint4B
    

    CreateTime:记录当前进程何时创建

    ExitTime:记录当前进程何时退出

    UniqueProcessId:存储进程PID

    AtiveProcessLinks

    1. 双向链表:所有的活动进程都连接在一起,构成了一个链表
    2. PsActiveProcessHead指向全局链表头
    3. 第一个成员指向后一个进程结构体,第二个成员指向前一个进程结构体
      PsActiveProcessHead
      注意:指向的位置是进程结构体的AtiveProcessLinks成员,需要手动调整偏移
      调整偏移

    QuotaUsage&QuotaPeak物理页相关统计信息

    CommitCharge/PeakVirtualSize/VirtualSize虚拟内存相关统计信息

    VadRoot:标识0-2G哪些地址被占用了

    DebugPort&ExceptionPort调试相关

    ObjectTable

    1. 句柄表,记录了被使用句柄的地址
    2. 可以通过遍历句柄表查看哪些进程调用了某个句柄,从而达到反调试的目的

    ImageFileName:进程镜像文件名,最多16个字节

    ActiveThreads:活动线程的数量

    Peb

    1. 全称:Process Environment Block(进程环境块)
    2. 进程在3环的一个结构体,里面包含了进程的模块列表、是否处于调试状态等信息
    3. 详情参考潘爱民老师《Windows内核原理与实现》第三章

    +0x000 Pcb : _KPROCESS

    描述EPROCESS结构体成员之一

    结构体
    KPROCESS
    Header

    1. 可等待对象,可以作为 WaitForSingleObject 等类似函数的参数
    2. 常用于Mutex互斥体Event事件

    DirectoryTableBase

    1. 页目录表基址,一个进程结构体最重要的成员
    2. 控制了页目录表,就相当于控制了所有的物理页
    3. 它存储的值就是Cr3的值

    KernelTime:进程在0环运行的时间

    UserTime:进程在3环运行的时间

    Affinity

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

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

    +0x1b0 Peb : Ptr32 _PEB

    描述

    1. EPROCESS结构体成员之一
    2. 全称:Process Environment Block(进程环境块)
    3. 进程在3环的一个结构体,里面包含了进程的模块列表、是否处于调试状态等信息
    4. 详情参考潘爱民老师《Windows内核原理与实现》第三章

    在WinDbg中查看

    kd>dt _PEB

    ntdll!_PEB
       +0x000 InheritedAddressSpace : UChar
       +0x001 ReadImageFileExecOptions : UChar
       +0x002 BeingDebugged    : UChar
       +0x003 SpareBool        : UChar
       +0x004 Mutant           : Ptr32 Void
       +0x008 ImageBaseAddress : Ptr32 Void
       +0x00c Ldr              : Ptr32 _PEB_LDR_DATA
       +0x010 ProcessParameters : Ptr32 _RTL_USER_PROCESS_PARAMETERS
       +0x014 SubSystemData    : Ptr32 Void
       +0x018 ProcessHeap      : Ptr32 Void
       +0x01c FastPebLock      : Ptr32 _RTL_CRITICAL_SECTION
       +0x020 FastPebLockRoutine : Ptr32 Void
       +0x024 FastPebUnlockRoutine : Ptr32 Void
       +0x028 EnvironmentUpdateCount : Uint4B
       +0x02c KernelCallbackTable : Ptr32 Void
       +0x030 SystemReserved   : [1] Uint4B
       +0x034 AtlThunkSListPtr32 : Uint4B
       +0x038 FreeList         : Ptr32 _PEB_FREE_BLOCK
       +0x03c TlsExpansionCounter : Uint4B
       +0x040 TlsBitmap        : Ptr32 Void
       +0x044 TlsBitmapBits    : [2] Uint4B
       +0x04c ReadOnlySharedMemoryBase : Ptr32 Void
       +0x050 ReadOnlySharedMemoryHeap : Ptr32 Void
       +0x054 ReadOnlyStaticServerData : Ptr32 Ptr32 Void
       +0x058 AnsiCodePageData : Ptr32 Void
       +0x05c OemCodePageData  : Ptr32 Void
       +0x060 UnicodeCaseTableData : Ptr32 Void
       +0x064 NumberOfProcessors : Uint4B
       +0x068 NtGlobalFlag     : Uint4B
       +0x070 CriticalSectionTimeout : _LARGE_INTEGER
       +0x078 HeapSegmentReserve : Uint4B
       +0x07c HeapSegmentCommit : Uint4B
       +0x080 HeapDeCommitTotalFreeThreshold : Uint4B
       +0x084 HeapDeCommitFreeBlockThreshold : Uint4B
       +0x088 NumberOfHeaps    : Uint4B
       +0x08c MaximumNumberOfHeaps : Uint4B
       +0x090 ProcessHeaps     : Ptr32 Ptr32 Void
       +0x094 GdiSharedHandleTable : Ptr32 Void
       +0x098 ProcessStarterHelper : Ptr32 Void
       +0x09c GdiDCAttributeList : Uint4B
       +0x0a0 LoaderLock       : Ptr32 Void
       +0x0a4 OSMajorVersion   : Uint4B
       +0x0a8 OSMinorVersion   : Uint4B
       +0x0ac OSBuildNumber    : Uint2B
       +0x0ae OSCSDVersion     : Uint2B
       +0x0b0 OSPlatformId     : Uint4B
       +0x0b4 ImageSubsystem   : Uint4B
       +0x0b8 ImageSubsystemMajorVersion : Uint4B
       +0x0bc ImageSubsystemMinorVersion : Uint4B
       +0x0c0 ImageProcessAffinityMask : Uint4B
       +0x0c4 GdiHandleBuffer  : [34] Uint4B
       +0x14c PostProcessInitRoutine : Ptr32     void 
       +0x150 TlsExpansionBitmap : Ptr32 Void
       +0x154 TlsExpansionBitmapBits : [32] Uint4B
       +0x1d4 SessionId        : Uint4B
       +0x1d8 AppCompatFlags   : _ULARGE_INTEGER
       +0x1e0 AppCompatFlagsUser : _ULARGE_INTEGER
       +0x1e8 pShimData        : Ptr32 Void
       +0x1ec AppCompatInfo    : Ptr32 Void
       +0x1f0 CSDVersion       : _UNICODE_STRING
       +0x1f8 ActivationContextData : Ptr32 Void
       +0x1fc ProcessAssemblyStorageMap : Ptr32 Void
       +0x200 SystemDefaultActivationContextData : Ptr32 Void
       +0x204 SystemAssemblyStorageMap : Ptr32 Void
       +0x208 MinimumStackCommit : Uint4B
    
    

    BeingDebugged:若进程处于被调试状态,置1

    Ldr_PEB_LDR_DATA结构体

    在WinDbg中查看:

    kd>dt _PEB_LDR_DATA

    ntdll!_PEB_LDR_DATA
       +0x000 Length           : Uint4B
       +0x004 Initialized      : UChar
       +0x008 SsHandle         : Ptr32 Void
       +0x00c InLoadOrderModuleList				: _LIST_ENTRY	模块加载的顺序
       +0x014 InMemoryOrderModuleList			: _LIST_ENTRY	模块在内存中的顺序
       +0x01c InInitializationOrderModuleList	: _LIST_ENTRY	模块初始化的顺序
       											: 断掉这三个链表可以达到模块隐藏的目的
       +0x024 EntryInProgress  : Ptr32 Void
    

    练习

    要求:对进程进行断链

    解题步骤

    第一步:打开一个进程

    例:记事本(notepad.exe)
    notepad

    第二步:在任务管理器中找到相应进程

    task_manager

    第三步:在WinDbg中找到对应进程结构体

    注意:由于进程和任务管理器是最后打开的,因此极可能在链表最后一个位置,因此建议从后往前找
    notepad
    前一个 EPROCESS 地址:0x8619f0a8 - 0x88
    后一个 EPROCESS 地址:0x860000a8 - 0x88

    第四步:断链

    将前一个节点->next值改为 0x860000a8

    kd>ed 8619f0a8 860000a8

    将后一个节点->pre值改为 0x8619f0a8

    kd>ed 860000a8+4 8619f0a8

    第五步:再次查看任务管理器

    此时在任务管理器进程列表中已经找不到notepad.exe
    task_manager

    展开全文
  • 每个windows进程在0环都有一个对应的结构体:EPROCESS 这个结构体包含了进程所有重要的信息。 PEB在3环,EPROCESS在0环。 KPROCESS主要成员介绍 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...

    首先说明这分析的是XP系统,WIN7每个单元偏移略有差距

    进程结构体EPROCESS

    每个windows进程在0环都有一个对应的结构体:EPROCESS 这个结构体包含了进程所有重要的信息。

    PEB在3环,EPROCESS在0环。

    KPROCESS主要成员介绍

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    1)	+0x000 Header           : _DISPATCHER_HEADER
    
           	“可等待”对象,比如Mutex互斥体、Event事件等(WaitForSingleObject)
    
    2)	+0x018 DirectoryTableBase : [2] Uint4B
    
            	页目录表的基址,CR3的值
    
    3)	+0x020 LdtDescriptor    : _KGDTENTRY	
          	+0x028 Int21Descriptor  : _KIDTENTRY
    	
            	历史遗留,16位Windows 段选择子不够 每个进程都有一个LDT表
            	Int21Descriptor  是 DOS下要用的
    4)	+0x038 KernelTime       : Uint4B
    	+0x03c UserTime         : Uint4B
    	统计信息 记录了一个进程在内核模式/用户模式下所花的时间
    	
    5)   	+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 那么这个进程就死了
    6)   	+0x062 BasePriority     : Char
    	基础优先级或最低优先级 该进程中的所有线程最起码的优先级.
    

    EPROCESS其他成员

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    
    1)	+0x070 CreateTime       : _LARGE_INTEGER			+0x078 ExitTime         : _LARGE_INTEGER
    	进程的创建/退出时间
    
    2)	+0x084 UniqueProcessId  : Ptr32 Void
    	进程的编号 任务管理器中的PID
    
    3)	+0x088 ActiveProcessLinks : _LIST_ENTRY
    	双向链表 所有的活动进程都连接在一起,构成了一个链表
    	PsActiveProcessHead指向全局链表头
    	
    4)	+0x090 QuotaUsage       : [3] Uint4B				+0x09c QuotaPeak        : [3] Uint4B	
    	物理页相关的统计信息
    
    5)	+0x0a8 CommitCharge     : Uint4B				
       	+0x0ac PeakVirtualSize  : Uint4B				
       	+0x0b0 VirtualSize      : Uint4B
    	虚拟内存相关的统计信息
    
    6)	+0x11c VadRoot          : Ptr32 Void
    	标识0-2G哪些地址没占用了
    	
    7)	+0x0bc DebugPort        : Ptr32 Void
    	+0x0c0 ExceptionPort    : Ptr32 Void	 
    	调试相关,DebugPort清0,就是一种反调试手段。
    
    8)	+0x0c4 ObjectTable      : Ptr32 _HANDLE_TABLE
    	句柄表,这里也可以反调试,遍历其他进程句柄表,如果发现自己就是被调试的
    
    9)	+0x174 ImageFileName    : [16] UChar
    	进程镜像文件名 最多16个字节
    
    10)	+0x1a0 ActiveThreads    : Uint4B
    	活动线程的数量
    
    11)	+0x1b0 Peb              : Ptr32 _PEB
    
    	PEB((Process Environment Block 进程环境块):进程在3环的一个结构体,里面包含了进程的模块列表、是否处于调试状态等信息。
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    
    kd> dd PsActiveProcessHead
    83f7bf18  865cd960 8819eb10 00000000 00000000
    83f7bf28  83eef48c 00000000 00000000 8b6010a8
    这个是活动的进程链,是从_EPROCESS偏移0x88处链起来的所以要查看如下
    
    kd> dt _EPROCESS 865cd960-0x88
    ntdll!_EPROCESS
       +0x000 Pcb              : _KPROCESS
       +0x098 ProcessLock      : _EX_PUSH_LOCK
       +0x0a0 CreateTime       : _LARGE_INTEGER 0x83f6fcc0`0000000b
       +0x0a8 ExitTime         : _LARGE_INTEGER 0x007b0000`00000000
       +0x0b0 RundownProtect   : _EX_RUNDOWN_REF
       +0x0b4 UniqueProcessId  : (null) 
       +0x0b8 ActiveProcessLinks : _LIST_ENTRY [ 0x0 - 0x0 ]
       +0x0c0 ProcessQuotaUsage : [2] 0
       +0x0c8 ProcessQuotaPeak : [2] 0x8b601273
       +0x0d0 CommitCharge     : 0
       +0x0d4 QuotaBlock       : (null) 
       +0x0d8 CpuQuotaBlock    : (null) 
       +0x0dc PeakVirtualSize  : 0
       +0x0e0 VirtualSize      : 0x865f82e0
       +0x0e4 SessionProcessLinks : _LIST_ENTRY [ 0x0 - 0x3 ]
       +0x0ec DebugPort        : 0x00000040 Void
       +0x0f0 ExceptionPortData : (null) 
       +0x0f0 ExceptionPortValue : 0
       +0x0f0 ExceptionPortState : 0y000
       +0x0f4 ObjectTable      : (null) 
       +0x0f8 Token            : _EX_FAST_REF
       +0x0fc WorkingSetPage   : 0
       +0x100 AddressCreationLock : _EX_PUSH_LOCK
       +0x104 RotateInProgress : (null) 
       +0x108 ForkInProgress   : (null) 
       +0x10c HardwareTrigger  : 0
       +0x110 PhysicalVadRoot  : (null) 
       +0x114 CloneRoot        : (null) 
       +0x118 NumberOfPrivatePages : 0
       +0x11c NumberOfLockedPages : 0
       +0x120 Win32Process     : 0x8b6088d8 Void
       +0x124 Job              : (null) 
       +0x128 SectionObject    : 0x7ffe0000 Void
       +0x12c SectionBaseAddress : (null) 
       +0x130 Cookie           : 0
       +0x134 Spare8           : 0
       +0x138 WorkingSetWatch  : (null) 
       +0x13c Win32WindowStation : 0x74737953 Void
       +0x140 InheritedFromUniqueProcessId : 0x00006d65 Void
       +0x144 LdtInformation   : (null) 
       +0x148 VdmObjects       : 0x02000000 Void
       +0x14c ConsoleHostProcess : 0
       +0x150 DeviceMap        : (null) 
       +0x154 EtwDataSource    : (null) 
       +0x158 FreeTebHint      : 0x865cd838 Void
       +0x160 PageDirectoryPte : _HARDWARE_PTE_X86
       +0x160 Filler           : 0x83f80fc0`00000000
       +0x168 Session          : 0x0000005c Void
       +0x16c ImageFileName    : [15]  ""
       +0x17b PriorityClass    : 0 ''
       +0x17c JobLinks         : _LIST_ENTRY [ 0x8709d522 - 0x9c ]
       +0x184 LockedPagesList  : (null) 
       +0x188 ThreadListHead   : _LIST_ENTRY [ 0x6c - 0x0 ]
       +0x190 SecurityPort     : 0x00000dfd Void
       +0x194 PaeTop           : (null) 
       +0x198 ActiveThreads    : 0x18325b0
       +0x19c ImagePathHash    : 0
       +0x1a0 DefaultHardErrorProcessing : 0x38ed48
       +0x1a4 LastThreadExitStatus : 0n0
       +0x1a8 Peb              : 0x00036201 _PEB
       +0x1ac PrefetchTrace    : _EX_FAST_REF
       +0x1b0 ReadOperationCount : _LARGE_INTEGER 0x0000002f`00000000
       +0x1b8 WriteOperationCount : _LARGE_INTEGER 0x8b601070`00000000
       +0x1c0 OtherOperationCount : _LARGE_INTEGER 0x0
       +0x1c8 ReadTransferCount : _LARGE_INTEGER 0x87ae5f3c`00000000
       +0x1d0 WriteTransferCount : _LARGE_INTEGER 0x87b1ff3c
       +0x1d8 OtherTransferCount : _LARGE_INTEGER 0x0
       +0x1e0 CommitChargeLimit : 0
       +0x1e4 CommitChargePeak : 0
       +0x1e8 AweInfo          : (null) 
       +0x1ec SeAuditProcessCreationInfo : _SE_AUDIT_PROCESS_CREATION_INFO
       +0x1f0 Vm               : _MMSUPPORT
       +0x25c MmProcessLinks   : _LIST_ENTRY [ 0x904 - 0x86fa4ce8 ]
       +0x264 HighestUserAddress : (null) 
       +0x268 ModifiedPageCount : 0
       +0x26c Flags2           : 0x9a84f1f4
       +0x26c JobNotReallyActive : 0y0
       +0x26c AccountingFolded : 0y0
       +0x26c NewProcessReported : 0y1
       +0x26c ExitProcessReported : 0y0
       +0x26c ReportCommitChanges : 0y1
    

    上面这个与进程隐藏有关。

    线程结构体ETHREAD

    每个windows线程在0环都有一个对应的结构体:ETHREAD 这个结构体包含了线程所有重要的信息。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    kd> dt _ETHREAD
    ntdll!_ETHREAD
       +0x000 Tcb              : _KTHREAD
       +0x200 CreateTime       : _LARGE_INTEGER
       +0x208 ExitTime         : _LARGE_INTEGER
       +0x208 KeyedWaitChain   : _LIST_ENTRY
       +0x210 ExitStatus       : Int4B
       +0x214 PostBlockList    : _LIST_ENTRY
       +0x214 ForwardLinkShadow : Ptr32 Void
       +0x218 StartAddress     : Ptr32 Void
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    kd> dt _KTHREAD
    ntdll!_KTHREAD
       +0x000 Header           : _DISPATCHER_HEADER
       +0x010 CycleTime        : Uint8B
       +0x018 HighCycleTime    : Uint4B
       +0x020 QuantumTarget    : Uint8B
       +0x028 InitialStack     : Ptr32 Void
       +0x02c StackLimit       : Ptr32 Void
       +0x030 KernelStack      : Ptr32 Void
       +0x034 ThreadLock       : Uint4B
       +0x038 WaitRegister     : _KWAIT_STATUS_REGISTER
       +0x039 Running          : UChar
       +0x03a Alerted          : [2] UChar
       +0x03c KernelStackResident : Pos 0, 1 Bit
       +0x03c ReadyTransition  : Pos 1, 1 Bit
       +0x03c ProcessReadyQueue : Pos 2, 1 Bit
       +0x03c WaitNext         : Pos 3, 1 Bit
       +0x03c SystemAffinityActive : Pos 4, 1 Bit
       +0x03c Alertable        : Pos 5, 1 Bit
    

    KTHREAD主要成员介绍

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    
    1)	+0x000 Header           : _DISPATCHER_HEADER
    
           	以这个开头的结构体,都可说是“可等待”对象,比如Mutex互斥体、Event事件等(WaitForSingleObject)
    
    2)	+0x018 InitialStack     : Ptr32 Void
       	+0x01c StackLimit       : Ptr32 Void
            	+0x028 KernelStack      : Ptr32 Void
    
    	线程切换相关,,每个线程都有个0环的堆栈和0环的TSS。
    
    3)	+0x020 Teb              : Ptr32 Void	
    
    	TEB,Thread Environment Block,线程环境块。
    	大小4KB,位于用户地址空间。
    	FS:[0] -> TEB(3环时  0环时FS执行KPCR)
    
    4)	+0x02c DebugActive      : UChar
    
           	如果值为-1 不能使用调试寄存器:Dr0 - Dr7
    
    5)	+0x034 ApcState         : _KAPC_STATE
       	+0x0e8 ApcQueueLock     : Uint4B
            	+0x138 ApcStatePointer  : [2] Ptr32 _KAPC_STATE
    	+0x14c SavedApcState    : _KAPC_STATE
    
    	APC相关 
    
    6)	+0x02d State            : UChar	
    
    	线程状态:就绪、等待还是运行
    
    7)	+0x06c BasePriority     : Char
    	
    	其初始值是所属进程的BasePriority值(KPROCESS->BasePriority),以后可以通过KeSetBasePriorityThread()函数重新设定
    
    8)	+0x070 WaitBlock        : [4] _KWAIT_BLOCK
    
           	等待哪个对象(WaitForSingleObject)
    
    
    9)	+0x0e0 ServiceTable     : Ptr32 Void	
    
    	指向系统服务表基址
    	
    10)	+0x134 TrapFrame
    	
    	进0环时保存环境(3换的寄存器之类的)
    
    11)	+0x140 PreviousMode     : Char
    
           	某些内核函数会判断程序是0环调用还是3环调用的
    
    12)	+0x1b0 ThreadListEntry  : _LIST_ENTRY
    
    	双向链表 一个进程所有的线程 都挂在一个链表中 挂的就是这个位置
    
    	一共有两个这样的链表
    

    ETHREAD其他成员介绍

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    1)	+0x1ec Cid              : _CLIENT_ID	
    	
    	进程ID、线程ID
    
    2)	+0x220 ThreadsProcess   : Ptr32 _EPROCESS
    
           	指向自己所属进程
    
    3)	+0x22c ThreadListEntry  : _LIST_ENTRY
    
    	双向链表 一个进程所有的线程 都挂在一个链表中 挂的就是这个位置
    
    	一共有两个这样的链表
    

    这个是两个链圈,一个是在KTHREAD里一个是ETHREAD。
    1

    1

    参考资料

    [1] 潘爱民老师《Windows内核原理与实现》 中的第3章
    [2] 滴水视频

    展开全文
  • 前言:操作系统创造进程和线程,实质就是构建一个结构体。 一、进程结构体EPROCESS ...每个windows进程在0环都有一个对应的结构体:EPROCESS 这个结构体包含了进程所有重要的信息。 成员之KPROCESS +...

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

    一、进程结构体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环的一个结构体,里面包含了进程的模块列表、是否处于调试状态等信息。
            
            

            

                

    展开全文
  • 1.进程结构体

    千次阅读 2018-10-18 22:48:37
    每个windows进程在0环都有一个对应的结构体: EPROCESS这个结构体包含了进程所有重要的信息。 kd> dt _EPROCESS nt!_EPROCESS //名称 //类型 +0x000 Pcb : _KPROCESS //子结构...
  • 定义一个结构体指针需要分配存储空间?

    万次阅读 多人点赞 2017-01-12 13:43:06
    1.首先函数的参数两种传递方式,一个是值传递,一个是地址传递。当指针作为参数传递的时候,即为地址传递,但C++写的时候需要加&引用符号,而C语言却不用。 2.本文谈的是这个问题,即为当声明一个结构体指针时,为...
  • 文章目录前言EPROCESSKPROCESS主要成员EPROCESS其他成员...进程线程的知识点很多,如果我们想了解问题的本质,就要从一些关键的结构体学起,先来介绍一个进程密切相关的结构体 EPROCESS 每个进程在零环都...
  • 日期 内核版本 架构 作者 GitHub CSDN 2016-05-12 Linux-4.5 X86 & arm gatieme LinuxDeviceDrivers Linux-进程管理与调度 ...注意,程序并不是进程,实际上两或多个进程不仅可能执行同一程序
  • 文章目录目录进程结构体EPROCESS_EPROCESS_KPROCESS其他重要结构体线程结构体ETHREADETHREAD_KTHREAD其他重要结构体CPU控制区结构体KPCRNT_TIB其他重要成员KPRCB等待链表和调度链表等待链表33链表版本差异总结 ...
  • 进程是处于执行期的程序以及它所管理的资源(如...Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息。它定义在include/linux/sched.h文件中。 谈到task_s
  •  在做一个项目时,使用了较多的结构体,并且存在一些结构体的嵌套,即某结构体成员集合包含另一个结构体等,总是出现一些奇怪的错误,才终于下决心好好分析一下到底类和结构体有啥不同,虽然它们很相似,但确实很...
  • 进程以及task_struct结构体

    千次阅读 2017-04-15 17:04:21
    进程1、进程的概念首先在linux操作系统下,当你触发任何一个事件时,系统都将它定义为一个进程,并且给予这个进程一个ID,即PID。 那么如何产生一个进程呢?简单来说就是“执行一个程序或命令”。2、进程与程序的...
  • 这个数据集有一个名称,叫做文件名。实际上在前面的各章中我们已经多次使用了文件,例如源程序文件、目标文件、可执行文件、库文件 (头文件)等。文件通常是驻留在外部介质(如磁盘等)上的,在使用时才调入内存中来。...
  • Linux源码学习系列之命名空间tast_struck简介tast_struck为linux下sche.h文件中用于进程信息保存的结构体,包含可大量的内置类型和自定义结构体指针类型,用于linux内核进程的控制能力。 内核进程从大意上分文用户...
  • 一个宏定义FIND求一个结构体struct里某个变量相对struc的编移量. 如:stuct student  {  int a;  char b[20];  double ccc;  }  则:  FIND(student,a); //等于0  FIND(student,b);//等于4 ...
  • 一个好的调度算法应当考虑以下几个方面: 公平:保证每个进程得到合理的CPU时间。 高效:使CPU保持忙碌状态,即总是有进程在CPU上运行。 响应时间:使交互用户的响应时间尽可能短。 周转时间:使批处理用户...
  • SGX结构体

    2020-08-04 16:48:55
    SGX Enclave Control Structure,每个Enclave进程都具有一个结构体,用于保存关于该进程的信息,如Enclave的线性基址(对于整个程序而言)和大小。保存在EPC中该Enclave的内存空间,只能由CPU访问。部分成员变量...
  • 宏定义:得到一个field在结构体(struct type)中的偏移量 #define OFFSETOF(type, field) ((size_t)&(((type *)0)->field)) (type *)0:把0地址当成type类型的指针。 ((type *)0)->...
  • 一个宏定义FIND求一个结构体struct里某个变量相对struc的编移量. <br />如:stuct student { int a; char b[20]; double ccc; } 则: FIND(student,a)...
  • linux进程task_struct结构体中的state域

    千次阅读 2014-04-01 20:47:48
    谈到task_struct结构体,可以说她是linux内核源码中最复杂的一个结构体了,成员之多,占用内存之大。 鉴于她的复杂,我们不能简单的亵渎,而是要深入“窥探”. 下面先介绍这些复杂成员中的一员,state域 ...
  • 实际上两或多个进程不仅可能执行同一程序,而且还有可能共享地址空间等资源。我们来看看进程与程序的不同:1.存储位置不同,程序在硬盘上,进程在内存里2.进程除了拥有和程序一样的代码,还有PCB,进程比程序多...
  • 日期 内核版本 架构 作者 GitHub CSDN 2016-05-12 Linux-4.5 X86 & arm gatieme LinuxDeviceDrivers Linux-进程管理与调度 ...注意,程序并不是进程,实际上两或多个进程不仅可能执行同一程序
  • 3.由此,到一个结构体中field所占用的字节 数就很简单了。 #define FIELD_SIZE(type, field) sizeof(((type *)0)->field) 4.其实,系统给提供了一个相同的宏定义,在文件 stddef.h中: 在嵌入式系统里,...
  • Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程, task_struct是Linux中的【进程控制块PCB结构】的具体数据结构。 task_struct:是Linux内核的一种数据结构。它放在RAM(运行内存)里并包含着...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,424
精华内容 16,569
关键字:

一个结构体只能有一个进程