zoukankan      html  css  js  c++  java
  • teb, peb,seh 结构

    1.teb:线程环境块

    重要字段: 以fs:[0]为基址,fs:[0]的值即为teb的地址, 可以将fs理解为指向teb,后面的0是个字节级别的偏移,虽然并不完全正确,但方便记忆

    +0x0   *NtTib        是个_NT_TIB 结构

    +0x18  *teb==fs:[0]

    +0x30  *peb

    _NT_TIB :  

    +0x000 ExceptionList : Ptr32 _EXCEPTION_REGISTRATION_RECORD
    +0x004 StackBase : Ptr32 Void
    +0x008 StackLimit : Ptr32 Void
    +0x00c SubSystemTib : Ptr32 Void
    +0x010 FiberData : Ptr32 Void
    +0x010 Version : Uint4B
    +0x014 ArbitraryUserPointer : Ptr32 Void
    +0x018 Self : Ptr32 _NT_TIB

    就第一个字段比较重要,它是指向seh链节点的指针:

    +0x000 Next : Ptr32 _EXCEPTION_REGISTRATION_RECORD
    +0x004 Handler : Ptr32 _EXCEPTION_DISPOSITION

    根据以上结构得知:

    fs:[0]=seh链第一个节点的地址, _EXCEPTION_REGISTRATION_RECORD类型的结构体就是seh链的节点的数据类型,seh链是个单链表,fs:[0]指向

    seh这个链表的第一个节点,

    对于节点中的异常处理函数Handler的函数类型并未公开但是返回_EXCEPTION_DISPOSITION类型的枚举,网上找到的结果:

    __cdecl _except_handler(

        struct _EXCEPTION_RECORD *ExceptionRecord,    
        EXCEPTION_REGISTRATION_RECORD *EstablisherFrame,  //seh链节点结构
        struct _CONTEXT *ContextRecord,              //线程上下文
        void * DispatcherContext
    );
    _EXCEPTION_DISPOSITION:

    ExceptionContinueExecution = 0n0
    ExceptionContinueSearch = 0n1
    ExceptionNestedException = 0n2
    ExceptionCollidedUnwind = 0n3

     

    _EXCEPTION_RECORD :

    +0x000 ExceptionCode : Int4B        //异常类型代码
    +0x004 ExceptionFlags : Uint4B      
    +0x008 ExceptionRecord : Ptr32 _EXCEPTION_RECORD
    +0x00c ExceptionAddress : Ptr32 Void    //异常地址
    +0x010 NumberParameters : Uint4B
    +0x014 ExceptionInformation : [15] Uint4B

    2.进程环境块 peb

    重要字段:

    +0x2  isDebugging

    +0x8  imageBase

    +0xc  *Ldr

    ldr结构:

       +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
       +0x028 ShutdownInProgress : UChar
       +0x02c ShutdownThreadId : Ptr32 Void

    附:

    win7 teb结构:

    +0x000 NtTib            : _NT_TIB
       +0x01c EnvironmentPointer : Ptr32 Void
       +0x020 ClientId         : _CLIENT_ID
       +0x028 ActiveRpcHandle  : Ptr32 Void
       +0x02c ThreadLocalStoragePointer : Ptr32 Void
       +0x030 ProcessEnvironmentBlock : Ptr32 _PEB
       +0x034 LastErrorValue   : Uint4B
       +0x038 CountOfOwnedCriticalSections : Uint4B
       +0x03c CsrClientThread  : Ptr32 Void
       +0x040 Win32ThreadInfo  : Ptr32 Void
       +0x044 User32Reserved   : [26] Uint4B
       +0x0ac UserReserved     : [5] Uint4B
       +0x0c0 WOW32Reserved    : Ptr32 Void
       +0x0c4 CurrentLocale    : Uint4B
       +0x0c8 FpSoftwareStatusRegister : Uint4B
       +0x0cc SystemReserved1  : [54] Ptr32 Void
       +0x1a4 ExceptionCode    : Int4B
       +0x1a8 ActivationContextStackPointer : Ptr32 _ACTIVATION_CONTEXT_STACK
       +0x1ac SpareBytes       : [36] UChar
       +0x1d0 TxFsContext      : Uint4B
       +0x1d4 GdiTebBatch      : _GDI_TEB_BATCH
       +0x6b4 RealClientId     : _CLIENT_ID
       +0x6bc GdiCachedProcessHandle : Ptr32 Void
       +0x6c0 GdiClientPID     : Uint4B
       +0x6c4 GdiClientTID     : Uint4B
       +0x6c8 GdiThreadLocalInfo : Ptr32 Void
       +0x6cc Win32ClientInfo  : [62] Uint4B
       +0x7c4 glDispatchTable  : [233] Ptr32 Void
       +0xb68 glReserved1      : [29] Uint4B
       +0xbdc glReserved2      : Ptr32 Void
       +0xbe0 glSectionInfo    : Ptr32 Void
       +0xbe4 glSection        : Ptr32 Void
       +0xbe8 glTable          : Ptr32 Void
       +0xbec glCurrentRC      : Ptr32 Void
       +0xbf0 glContext        : Ptr32 Void
       +0xbf4 LastStatusValue  : Uint4B
       +0xbf8 StaticUnicodeString : _UNICODE_STRING
       +0xc00 StaticUnicodeBuffer : [261] Wchar
       +0xe0c DeallocationStack : Ptr32 Void
       +0xe10 TlsSlots         : [64] Ptr32 Void
       +0xf10 TlsLinks         : _LIST_ENTRY
       +0xf18 Vdm              : Ptr32 Void
       +0xf1c ReservedForNtRpc : Ptr32 Void
       +0xf20 DbgSsReserved    : [2] Ptr32 Void
       +0xf28 HardErrorMode    : Uint4B
       +0xf2c Instrumentation  : [9] Ptr32 Void
       +0xf50 ActivityId       : _GUID
       +0xf60 SubProcessTag    : Ptr32 Void
       +0xf64 EtwLocalData     : Ptr32 Void
       +0xf68 EtwTraceData     : Ptr32 Void
       +0xf6c WinSockData      : Ptr32 Void
       +0xf70 GdiBatchCount    : Uint4B
       +0xf74 CurrentIdealProcessor : _PROCESSOR_NUMBER
       +0xf74 IdealProcessorValue : Uint4B
       +0xf74 ReservedPad0     : UChar
       +0xf75 ReservedPad1     : UChar
       +0xf76 ReservedPad2     : UChar
       +0xf77 IdealProcessor   : UChar
       +0xf78 GuaranteedStackBytes : Uint4B
       +0xf7c ReservedForPerf  : Ptr32 Void
       +0xf80 ReservedForOle   : Ptr32 Void
       +0xf84 WaitingOnLoaderLock : Uint4B
       +0xf88 SavedPriorityState : Ptr32 Void
       +0xf8c SoftPatchPtr1    : Uint4B
       +0xf90 ThreadPoolData   : Ptr32 Void
       +0xf94 TlsExpansionSlots : Ptr32 Ptr32 Void
       +0xf98 MuiGeneration    : Uint4B
       +0xf9c IsImpersonating  : Uint4B
       +0xfa0 NlsCache         : Ptr32 Void
       +0xfa4 pShimData        : Ptr32 Void
       +0xfa8 HeapVirtualAffinity : Uint4B
       +0xfac CurrentTransactionHandle : Ptr32 Void
       +0xfb0 ActiveFrame      : Ptr32 _TEB_ACTIVE_FRAME
       +0xfb4 FlsData          : Ptr32 Void
       +0xfb8 PreferredLanguages : Ptr32 Void
       +0xfbc UserPrefLanguages : Ptr32 Void
       +0xfc0 MergedPrefLanguages : Ptr32 Void
       +0xfc4 MuiImpersonation : Uint4B
       +0xfc8 CrossTebFlags    : Uint2B
       +0xfc8 SpareCrossTebBits : Pos 0, 16 Bits
       +0xfca SameTebFlags     : Uint2B
       +0xfca SafeThunkCall    : Pos 0, 1 Bit
       +0xfca InDebugPrint     : Pos 1, 1 Bit
       +0xfca HasFiberData     : Pos 2, 1 Bit
       +0xfca SkipThreadAttach : Pos 3, 1 Bit
       +0xfca WerInShipAssertCode : Pos 4, 1 Bit
       +0xfca RanProcessInit   : Pos 5, 1 Bit
       +0xfca ClonedThread     : Pos 6, 1 Bit
       +0xfca SuppressDebugMsg : Pos 7, 1 Bit
       +0xfca DisableUserStackWalk : Pos 8, 1 Bit
       +0xfca RtlExceptionAttached : Pos 9, 1 Bit
       +0xfca InitialThread    : Pos 10, 1 Bit
       +0xfca SpareSameTebBits : Pos 11, 5 Bits
       +0xfcc TxnScopeEnterCallback : Ptr32 Void
       +0xfd0 TxnScopeExitCallback : Ptr32 Void
       +0xfd4 TxnScopeContext  : Ptr32 Void
       +0xfd8 LockCount        : Uint4B
       +0xfdc SpareUlong0      : Uint4B
       +0xfe0 ResourceRetValue : Ptr32 Void

    win7 peb结构

       +0x000 InheritedAddressSpace : UChar
       +0x001 ReadImageFileExecOptions : UChar
       +0x002 BeingDebugged    : UChar
       +0x003 BitField         : UChar
       +0x003 ImageUsesLargePages : Pos 0, 1 Bit
       +0x003 IsProtectedProcess : Pos 1, 1 Bit
       +0x003 IsLegacyProcess  : Pos 2, 1 Bit
       +0x003 IsImageDynamicallyRelocated : Pos 3, 1 Bit
       +0x003 SkipPatchingUser32Forwarders : Pos 4, 1 Bit
       +0x003 SpareBits        : Pos 5, 3 Bits
       +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 AtlThunkSListPtr : Ptr32 Void
       +0x024 IFEOKey          : Ptr32 Void
       +0x028 CrossProcessFlags : Uint4B
       +0x028 ProcessInJob     : Pos 0, 1 Bit
       +0x028 ProcessInitializing : Pos 1, 1 Bit
       +0x028 ProcessUsingVEH  : Pos 2, 1 Bit
       +0x028 ProcessUsingVCH  : Pos 3, 1 Bit
       +0x028 ProcessUsingFTH  : Pos 4, 1 Bit
       +0x028 ReservedBits0    : Pos 5, 27 Bits
       +0x02c KernelCallbackTable : Ptr32 Void
       +0x02c UserSharedInfoPtr : Ptr32 Void
       +0x030 SystemReserved   : [1] Uint4B
       +0x034 AtlThunkSListPtr32 : Uint4B
       +0x038 ApiSetMap        : Ptr32 Void
       +0x03c TlsExpansionCounter : Uint4B
       +0x040 TlsBitmap        : Ptr32 Void
       +0x044 TlsBitmapBits    : [2] Uint4B
       +0x04c ReadOnlySharedMemoryBase : Ptr32 Void
       +0x050 HotpatchInformation : 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 _RTL_CRITICAL_SECTION
       +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 ActiveProcessAffinityMask : 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 _ACTIVATION_CONTEXT_DATA
       +0x1fc ProcessAssemblyStorageMap : Ptr32 _ASSEMBLY_STORAGE_MAP
       +0x200 SystemDefaultActivationContextData : Ptr32 _ACTIVATION_CONTEXT_DATA
       +0x204 SystemAssemblyStorageMap : Ptr32 _ASSEMBLY_STORAGE_MAP
       +0x208 MinimumStackCommit : Uint4B
       +0x20c FlsCallback      : Ptr32 _FLS_CALLBACK_INFO
       +0x210 FlsListHead      : _LIST_ENTRY
       +0x218 FlsBitmap        : Ptr32 Void
       +0x21c FlsBitmapBits    : [4] Uint4B
       +0x22c FlsHighIndex     : Uint4B
       +0x230 WerRegistrationData : Ptr32 Void
       +0x234 WerShipAssertPtr : Ptr32 Void
       +0x238 pContextData     : Ptr32 Void
       +0x23c pImageHeaderHash : Ptr32 Void
       +0x240 TracingFlags     : Uint4B
       +0x240 HeapTracingEnabled : Pos 0, 1 Bit
       +0x240 CritSecTracingEnabled : Pos 1, 1 Bit
       +0x240 SpareTracingBits : Pos 2, 30 Bits
  • 相关阅读:
    python第四章:列表
    python第三章:函数
    python第二章:控制流
    python第一章:基础
    Spring Boot 集成 Mybatis(druid 数据库连接池 以及 分页配置)
    Spring Boot与Logback的运用(自定义异常+AOP)
    Spring Boot 简单的请求示例(包括请求体验证)
    Spring Boot之初始化项目
    深入理解javascript系列,读书笔记
    事件冒泡机制和事件委派 以及回调的匿名函数参数
  • 原文地址:https://www.cnblogs.com/freesec/p/6576472.html
Copyright © 2011-2022 走看看