日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows进程与线程学习笔记(一)—— 进程结构体

發布時間:2025/3/21 windows 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows进程与线程学习笔记(一)—— 进程结构体 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Windows進程與線程學習筆記(一)—— 進程結構體

    • 進程結構體
      • EPROCESS
        • +0x000 Pcb : _KPROCESS
        • +0x1b0 Peb : Ptr32 _PEB
    • 練習
      • 解題步驟
        • 第一步:打開一個進程
        • 第二步:在任務管理器中找到相應進程
        • 第三步:在WinDbg中找到對應進程結構體
        • 第四步:斷鏈
        • 第五步:再次查看任務管理器

進程結構體

EPROCESS

描述

  • 每個windows進程在0環都有一個EPROCESS結構體
  • 這個結構體包含了進程所有的重要信息
  • 在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:

  • 雙向鏈表:所有的活動進程都連接在一起,構成了一個鏈表
  • PsActiveProcessHead指向全局鏈表頭
  • 第一個成員指向后一個進程結構體,第二個成員指向前一個進程結構體

    注意:指向的位置是進程結構體的AtiveProcessLinks成員,需要手動調整偏移
  • QuotaUsage&QuotaPeak:物理頁相關統計信息

    CommitCharge/PeakVirtualSize/VirtualSize:虛擬內存相關統計信息

    VadRoot:標識0-2G哪些地址被占用了

    DebugPort&ExceptionPort:調試相關

    ObjectTable:

  • 句柄表,記錄了被使用句柄的地址
  • 可以通過遍歷句柄表查看哪些進程調用了某個句柄,從而達到反調試的目的
  • ImageFileName:進程鏡像文件名,最多16個字節

    ActiveThreads:活動線程的數量

    Peb:

  • 全稱:Process Environment Block(進程環境塊)
  • 進程在3環的一個結構體,里面包含了進程的模塊列表、是否處于調試狀態等信息
  • 詳情參考潘愛民老師《Windows內核原理與實現》第三章
  • +0x000 Pcb : _KPROCESS

    描述EPROCESS結構體成員之一

    結構體

    Header:

  • 可等待對象,可以作為 WaitForSingleObject 等類似函數的參數
  • 常用于Mutex互斥體Event事件
  • DirectoryTableBase:

  • 頁目錄表基址,一個進程結構體中最重要的成員
  • 控制了頁目錄表,就相當于控制了所有的物理頁
  • 它存儲的值就是Cr3的值
  • KernelTime:進程在0環運行的時間

    UserTime:進程在3環運行的時間

    Affinity:

  • 規定進程里面的所有線程能在哪個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,那么這個進程就死了
  • BasePriority:基礎優先級或最低優先級,該進程中的所有線程最起碼的優先級

    +0x1b0 Peb : Ptr32 _PEB

    描述

  • EPROCESS結構體成員之一
  • 全稱:Process Environment Block(進程環境塊)
  • 進程在3環的一個結構體,里面包含了進程的模塊列表、是否處于調試狀態等信息
  • 詳情參考潘愛民老師《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)

    第二步:在任務管理器中找到相應進程

    第三步:在WinDbg中找到對應進程結構體

    注意:由于進程和任務管理器是最后打開的,因此極可能在鏈表最后一個位置,因此建議從后往前找

    前一個 EPROCESS 地址:0x8619f0a8 - 0x88
    后一個 EPROCESS 地址:0x860000a8 - 0x88

    第四步:斷鏈

    將前一個節點->next值改為 0x860000a8

    kd>ed 8619f0a8 860000a8

    將后一個節點->pre值改為 0x8619f0a8

    kd>ed 860000a8+4 8619f0a8

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

    此時在任務管理器進程列表中已經找不到notepad.exe

    總結

    以上是生活随笔為你收集整理的Windows进程与线程学习笔记(一)—— 进程结构体的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。