• PEB 和 TIB结构



    fs:7FFDF000
    nt!_TEB
    TEB at      fs:7FFDF000
    
       +0x000   NtTib                       // _NT_TIB
       +0x01c   EnvironmentPointer          // Ptr32 Void
       +0x020   ClientId                    // _CLIENT_ID
       +0x028   ActiveRpcHandle             // Ptr32 Void
       +0x02c   ThreadLocalStoragePointer   // Ptr32 Void
       +0x030   ProcessEnvironmentBlock     // Ptr32 _PEB  这里指向 PEB 表,即进程环境块
                LastErrorValue
                LastStatusValue
                Count Owned Locks
                HardErrorsMode
    *******************************************
    typedef struct _NT_TIB          //sizeof  1ch
    {
     00h   struct _EXCEPTION_REGISTRATION  *ExceptionList;          //SEH链入口
     04h   PVOID                            StackBase;              //堆栈基址
     08h   PVOID                            StackLimit;             //堆栈大小
     0ch   PVOID                            SubSystemTib;
           union {
               PVOID                FiberData;
     10h       DWORD                Version;
           };
     14h   PVOID                            ArbitraryUserPointer;
     18h   struct _NT_TIB                   *Self;                  //本NT_TIB结构自身的线性地址
    }NT_TIB;
    
    typedef     NT_TIB      *PNT_TIB;
    ********************************************************
    SEH链入口
    
    fs[0]->*ExceptionList
    
    typedef struc _EXCEPTION_REGISTRATION
    {
        struc EXCEPTION_REGISTRATION    *Prev;      //前一个_EXCEPTION_REGISTRATION结构
        DWORD                           Handler;    //异常处理过程地址
        struct scopetable_entry         *scopetable;
        int                             trylevel;
        int                             _ebp;
        PEXCEPTION_POINTERS             xpointers;
    }
        EXCEPTION_REGISTRATION,
        *PEXCEPTION_REGISTRATION;
    ////////////////////////////////////////////////
    typedef struct _EXCEPTION_POINTERS
    {
        PEXCEPTION_RECORD   ExceptionRecord;        //指向一个EXCEPTION_RECORD结构
        PCONTEXT            ContextRecord;          //指向向一个CONTEXT结构
    }
        EXCEPTION_POINTERS,
        *PEXCEPTION_POINTERS;
    /////////////////////////////////////////////////
    typedef struct _EXCEPTION_RECORD
    {
      00h  DWORD                     ExceptionCode;      //异常事件码
      04h  DWORD                     ExceptionFlags;     //标志
      08h  struct _EXCEPTION_RECORD  *ExceptionRecord;   //下一个EXCEPTION_RECORD结构地址
      0ch  PVOID                     ExceptionAddress;   //异常发生的地址
      10h  DWORD                     NumberParameters;   //ExceptionInformation的dword数目
      14h  ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
    } 1ch
        EXCEPTION_RECORD;
    
        typedef     EXCEPTION_RECORD        *PEXCEPTION_RECORD;
        #define     EXCEPTION_MAXIMUM_PARAMETERS    15
    /////////////////////////////////////////////////////////////////
    typedef struct _CONTEXT {
        DWORD           ContextFlags    // -|               +00h
        DWORD           Dr0             //  |               +04h
        DWORD           Dr1             //  |               +08h
        DWORD           Dr2             //  >调试寄存器     +0Ch
        DWORD           Dr3             //  |               +10h
        DWORD           Dr6             //  |               +14h
        DWORD           Dr7             // -|               +18h
    
        FLOATING_SAVE_AREA FloatSave;   //浮点寄存器区      +1Ch~~~88h
    
        DWORD           SegGs           //-|                +8Ch
        DWORD           SegFs           // |段寄存器       +90h
        DWORD           SegEs           // |/               +94h
        DWORD           SegDs           //-|                +98h
    
        DWORD           Edi             //________          +9Ch
        DWORD           Esi             // |  通用          +A0h
        DWORD           Ebx             // |   寄           +A4h
        DWORD           Edx             // |   存           +A8h
        DWORD           Ecx             // |   器           +ACh
        DWORD           Eax             //_|___组_          +B0h
    
        DWORD           Ebp             //++++++            +B4h
        DWORD           Eip             // |控制            +B8h
        DWORD           SegCs           // |寄存            +BCh
        DWORD           EFlag           // |器组            +C0h
        DWORD           Esp             // |                +C4h
        DWORD           SegSs           //++++++            +C8h
    
        BYTE    ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
    } CONTEXT;
        typedef     CONTEXT     *PCONTEXT;
        #define     MAXIMUM_SUPPORTED_EXTENSION     512
    ********************************************************
    fs:[30]->PEB
    typedef struct _PEB {               // Size: 0x1D8
        000h    UCHAR           InheritedAddressSpace;
        001h    UCHAR           ReadImageFileExecOptions;
        002h    UCHAR           BeingDebugged;              //Debug运行标志
        003h    UCHAR           SpareBool;
        004h    HANDLE          Mutant;
        008h    HINSTANCE       ImageBaseAddress;           //程序加载的基地址
        00Ch    struct _PEB_LDR_DATA    *Ldr                //Ptr32 _PEB_LDR_DATA
        010h    struct _RTL_USER_PROCESS_PARAMETERS  *ProcessParameters;
        014h    ULONG           SubSystemData;
        018h    HANDLE          DefaultHeap;
        01Ch    KSPIN_LOCK      FastPebLock;
        020h    ULONG           FastPebLockRoutine;
        024h    ULONG           FastPebUnlockRoutine;
        028h    ULONG           EnvironmentUpdateCount;
        02Ch    ULONG           KernelCallbackTable;
        030h    LARGE_INTEGER   SystemReserved;
        038h    struct _PEB_FREE_BLOCK  *FreeList
        03Ch    ULONG           TlsExpansionCounter;
        040h    ULONG           TlsBitmap;
        044h    LARGE_INTEGER   TlsBitmapBits;
        04Ch    ULONG           ReadOnlySharedMemoryBase;
        050h    ULONG           ReadOnlySharedMemoryHeap;
        054h    ULONG           ReadOnlyStaticServerData;
        058h    ULONG           AnsiCodePageData;
        05Ch    ULONG           OemCodePageData;
        060h    ULONG           UnicodeCaseTableData;
        064h    ULONG           NumberOfProcessors;
        068h    LARGE_INTEGER   NtGlobalFlag;               // Address of a local copy
        070h    LARGE_INTEGER   CriticalSectionTimeout;
        078h    ULONG           HeapSegmentReserve;
        07Ch    ULONG           HeapSegmentCommit;
        080h    ULONG           HeapDeCommitTotalFreeThreshold;
        084h    ULONG           HeapDeCommitFreeBlockThreshold;
        088h    ULONG           NumberOfHeaps;
        08Ch    ULONG           MaximumNumberOfHeaps;
        090h    ULONG           ProcessHeaps;
        094h    ULONG           GdiSharedHandleTable;
        098h    ULONG           ProcessStarterHelper;
        09Ch    ULONG           GdiDCAttributeList;
        0A0h    KSPIN_LOCK      LoaderLock;
        0A4h    ULONG           OSMajorVersion;
        0A8h    ULONG           OSMinorVersion;
        0ACh    USHORT          OSBuildNumber;
        0AEh    USHORT          OSCSDVersion;
        0B0h    ULONG           OSPlatformId;
        0B4h    ULONG           ImageSubsystem;
        0B8h    ULONG           ImageSubsystemMajorVersion;
        0BCh    ULONG           ImageSubsystemMinorVersion;
        0C0h    ULONG           ImageProcessAffinityMask;
        0C4h    ULONG           GdiHandleBuffer[0x22];
        14Ch    ULONG           PostProcessInitRoutine;
        150h    ULONG           TlsExpansionBitmap;
        154h    UCHAR           TlsExpansionBitmapBits[0x80];
        1D4h    ULONG           SessionId;
    } PEB, *PPEB;
    ***************************************************
    PEB[0C]->PEB_LDR_DATA
    
    typedef struct _PEB_LDR_DATA
    {
     ULONG         Length;                             // 00h
     BOOLEAN       Initialized;                        // 04h
     PVOID         SsHandle;                           // 08h
     LIST_ENTRY    InLoadOrderModuleList;              // 0ch
     LIST_ENTRY    InMemoryOrderModuleList;            // 14h
     LIST_ENTRY    InInitializationOrderModuleList;    // 1ch
    }
        PEB_LDR_DATA,
        *PPEB_LDR_DATA;                                 // 24h
    *********************************************************
    PEB_LDR_DATA[]->LIST_ENTRY
    
    nt!_LIST_ENTRY
       +0x000   Flink       : Ptr32 _LIST_ENTRY     //表示从前往后
       +0x004   Blink       : Ptr32 _LIST_ENTRY     //表示从后往前
    ********************************************************
    LIST_ENTRY[00].LDR_MODULE
    
    typedef struct _LDR_MODULE
    {
        LIST_ENTRY        InLoadOrderModuleList;            // 00h
        LIST_ENTRY        InMemoryOrderModuleList;          // 08h
        LIST_ENTRY        InInitializationOrderModuleList;  // 10h      ntdll
        PVOID             BaseAddress;                      // 18h      kernel32.dll
        PVOID             EntryPoint;                       // 1ch
        ULONG             SizeOfImage;                      // 20h
        UNICODE_STRING    FullDllName;                      // 24h
        UNICODE_STRING    BaseDllName;                      // 2ch
        ULONG             Flags;                            // 34h
        SHORT             LoadCount;                        // 38h
        SHORT             TlsIndex;                         // 3ah
        HANDLE            SectionHandle;                    // 3ch
        ULONG             CheckSum;                         // 40h
        ULONG             TimeDateStamp;                    // 44h
                                                            // 48h
    } LDR_MODULE, *PLDR_MODULE;
    ******************************************************* 


  • 相关阅读:
    电赛菜鸟营培训(五)——OLED屏幕的使用
    网站构建学习笔记(0)——基本概念了解及资源学习(copy自w3school)
    AppInventor学习笔记(五)——瓢虫快跑应用学习
    电赛菜鸟营培训(四)——STM32F103CB之ADC转换
    电赛菜鸟营培训(三)——STM32F103CB之串口通信
    [I2C]pca9555(i2c-gpio扩展)应用层测试代码
    [shell]简单的shell提示和参数脚本
    [Busybox]Busybox制作文件系统
    [boostrap]debian下为arm创建debian和emdebian文件系统
    [debootstrap]制作基于arm平台的debian文件系统
  • 原文地址:https://www.cnblogs.com/zcc1414/p/3982539.html
Copyright © 2020-2023  润新知