fs TIB TEB PEB

[逆向工程]什么是TEB 与 PEB(二十九) 阅读详情

 作 者: winwang
时 间: 2009-10-27,17:19
链 接: http://bbs.pediy.com/showthread.php?t=100190

在本学院拜读多位大牛的著作,自己整理的一些结构(有点不够完整)....
都是用户模式的结构
首先感谢看雪提供这么好的学习环境
声明:以下内容完全取自于看雪,我只是灌水
附件:方便自己阅读的一个小程式..怡笑大方了...

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;
*******************************************************

PEB TEB结构体使用 PEB TEB结构体属于windows平台进程的一个重要数据结构,使用windbg查看结构体信息及相关结构体成员信息的利用 阅读详情

相关推荐

TEB结构思考

在网上看到的一篇文章如下: TEB与PEB的结构分析,如阿燐燐所诉FS寄存器指向当前活动线程的TEB结构(线程结构)    用OD打开一个任意程序可以看到FS段寄存器的状况,其中选择子是003B,在GDT中的起始位置是7FFDF000,大小是00FFFFFF,是一个RING3的调用门。 在数据窗口中跟踪7FFDF000然后以长型地址的方式查看数据,可以完整的看到TEB结构 ,

stonesharp的专栏 4860

TEB(线程环境块)学习

文章目录TEBTEB结构中的两个重要成员NtTib成员PEB成员PEB.BeingDebuggedPEB.ImageBaseAddressPEB.LdrPEB.ProcessHeap & PEB.NtGolbalFlag TEB TEB结构中的两个重要成员 +0x000 NtTib :_NT_TIB . . . +0x30 ProcessEnvironmentBlock ...

weixin_44156885的博客 5963

从公式到实践:用SPSS解锁香农多样性指数的生态洞察

本文详细介绍了如何利用SPSS软件计算和应用香农多样性指数进行生态研究。从基础公式解析到SPSS实战操作,再到生态决策支持,全面展示了该指数在物种丰富度和均匀度量化中的价值。文章特别强调了SPSS操作中的关键技巧和常见误区,为生态研究者提供了一套完整的分析解决方案。

weixin_30832143的博客 466

如何使用windbg查看C#某个线程的栈大小 ?

每一个线程都有一个叫的线程环境块数据结构,这个结构中有一个叫做NT_TIB的结构,它里面有两个字段分别为StackBase和StackLimit,前面叫做,也就是栈顶,后者叫做,因为栈空间是向小地址增长的,所以用就能算出所谓的栈内存大小,接下来我们用windbg演示一下。......

biyusr的专栏 623

用Docker-Compose三节点部署生产级Doris集群:从配置文件到故障转移

本文详细介绍了如何使用Docker-Compose部署一个生产级的三节点Apache Doris集群。内容涵盖从核心架构理解、配置文件编写到集群初始化验证的全过程,并重点讲解了如何实现高可用、数据持久化、健康检查以及故障转移等生产级运维关键点,为中小团队提供了一种在容器化便利性与系统稳定性间取得平衡的可靠部署方案。

kkk56的博客 857

trae使用playwright MCP方法流程

trae使用playwright MCP方法流程

MAILLIBIN的专栏 1677

加载配置信息

加载配置信息 加载配置信息最初只用在Windows NT操作系统中,作为文件头部的延伸部分,后来被用做异常处理 加载配置信息表中红存放了基于结构化异常处理(Structureed Exception Handling,SEH)技术的各种异常句柄。当程序运行发生异常后,操作系统会根据异常类别对异常进行分发处理,并根据这些句柄实施程序流程的转向,保证系统能从异常中全身而退 定义 PE中的加载配置信息储存在一个名为加载配置结构(Load Configuration Structure)的数据结构中。加载配置结构是

megaparsec 568

DPABINet保姆级教程:零代码完成脑网络分析与图论计算

本文提供DPABINet的零代码脑网络分析全流程指南。该工具通过图形化界面集成时间序列提取、连接矩阵构建、图论指标计算及统计分析,大幅降低技术门槛。重点解析了阈值选择、二值化与小世界属性计算等关键步骤,帮助研究者快速掌握脑网络分析与图论计算,提升科研效率与可重复性。

j2k3l4的博客 670

Win32 系统线程信息块(TIB)浅析

<br />作者:Matt Pietrek<br /> 编译:VCKBASE <br />原文出处:May 1996 Under The Hood<br /><br />   Windows 操作系统各个版本之间虽然核心部分差异很大,但它们都共享一个关键的系统数据结构,许多程序员都没有加以关注。更精确地说,这种共享是针对此数据结构的某 些域。先不说差别,这个结构被广泛使用,甚至是被编译器产生的代码存取。没错,你的C++编译器产生代码

3206

深入SVT SPI VIP配置:如何灵活控制CS间隔、数据帧大小与时钟频率(含代码片段)

本文深入探讨了SVT SPI VIP的高级配置技巧,包括精确控制CS信号间隔、突破数据帧大小限制以及动态时钟频率切换。通过实战代码片段和详细配置步骤,帮助验证工程师灵活应对复杂SPI协议验证场景,提升验证效率和覆盖率。特别适合需要处理非标准SPI时序和特殊数据帧的芯片验证项目。

weixin_27014595的博客 281

江科大51单片机笔记【1】单片机及开发板介绍

单片机,Micro Controller Unit,简称MCU,内部集成了CPU、RAM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能单片机的任务是信息采集(传感器)、处理(CPU)和硬件设备(电机、LED)的控制单片机算是一个袖珍版计算机,是一个完整的计算机系统,成本低体积小结构简单单片机的使用领域:智能仪表、实时工控、通讯设备、导航系统、家用电器等。

2301_80195807的博客 841

常用的静态反调试技术及其规避方法

静态反调试虽然容易绕过,但是由于种类繁多,如果病毒结合了很多种静态反调试而对其了解不多的话,也不好办,所以了解更多的 方法不至于束手无策. 1.利用PEB的BeingDebugged 字段   已知fs:[0x30]指向PEB, PEB地址+0x2 处的一个字节的数据表示是否在被调试,如果是1则是,0则不是   当进程被附加时,系统会将该值置为1 IsDebuggerPresent() ...

weixin_30460489的博客 389

x86架构学习之中断

外部中断,一般是由CPU的外部引脚电信号触发,这些引脚留给硬件厂商去定义中断,例如主板厂商可以将USB中断挂载70号中断引脚上,MCU厂商可以将片上外设(SPI、I2C等)的中断挂载在指定中断线上。中断描述符主要用于说明该中断的入口地址,中断描述符表则是将中断描述符一项一项管理在一个数组中,每一项中断描述符占用8个字节(64位模式下,占用16字节),其。简称中断,后文如果没特别说明,中断都指外部中断,由外部IO事件触发,由于时钟源来自CPU外部,与CPU时钟不同源,因此是异步事件。

qq_26962739的博客 1572

FS TIB TEB PEB

本篇发表我的TEB 和 PEB的一些见解,我把它图形化了,更形象便于理解。 首先对于TIB TEB PEB的概念我引用一下别人的blog了,以下内容取自看雪: TEB(Thread Environment Block,线程环境块):系统在此TEB中保存频繁使用的线程相关的数据

jiangtongcn的专栏 5232

基于 ESP32 的宿舍洗浴热水余量预测与智能排队提醒系统设计与实现

本系统以 ESP32 为主控核心,通过超声波液位传感器实时监测储热水箱剩余水量,配合 DS18B20 温度传感器采集水温数据,建立热水余量预测模型估算可用洗浴时长;同时通过红外人体传感器统计浴室排队人数,结合人均洗浴时长计算预计等待时间,并通过 OLED 屏本地显示 + WiFi Web 服务器远程推送的方式实现排队提醒功能。

weixin_42300449的博客 45

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

171124 逆向-线程环境块(TEB)

1625-5 王子昂 总结《2017年11月24日》 【连续第420天总结】 A. TEB(线程环境块) B. 介绍该结构体中包含进程中运行线程的各种信息,每个线程都对应一个TEB结构体。 不同OS中TEB结构的形态略微不同。定义结构体中有非常多的成员,其中用户模式调试中起着重要作用的成员有两个:+0 NtTib : _NT_TIB ... +0X30 ProcessEnvironmentB

whklhhhh的博客 2340

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

TEB

TEB指线程环境块,该结构体包含进程中运行线程的各种信息,进程中的每个线程都对应一个TEB结构体。 Windows7中的TEB结构体成员。 +0x000 NtTib : _NT_TIB +0x01c EnvironmentPointer : Ptr32 Void +0x020 ClientId : _CLIENT_ID //进程的pid +0x028 ActiveRpcHandle : Ptr3.

qq_39249347的博客 2177

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

FS选择子所索引的结构

FS:[0x00]  Win9x and NT Current SEH frame FS:[0x04]  Win9x and NT Top of stack FS:[0x08]  Win9x and NT Current bottom of stack FS:[0x10]  NT Fiber data FS:[0x14]  Win9x and NT Arbitrary data slot FS:[

www.pingfi.com 1321

PEB和TEB资料整合

一、概念   TEB(Thread Environment Block,线程环境块)系统在此TEB中保存频繁使用的线程相关的数据。位于用户地址空间,在比 PEB 所在地址低的地方。进程中的每个线程都有自己的一个TEB。一个进程的所有TEB都以堆栈的方式,存放在从0x7FFDE000开始的线性内存中,每 4KB为一个完整的TEB,不过该内存区域是向下扩展的。在用户模式下,当前线程的TEB位于独立的...

weixin_30591551的博客 486

Win32之隐藏DLL隐藏模块技术

          Win32之隐藏DLL隐藏模块技术 这一讲涉及到windows底层技术.跟汇编内容. 我们才可以实现模块隐藏(也称为DLL隐藏) 一丶API反汇编勾引兴趣   我们都用过Windows的进程跟线程API 也就是 GetCurrentThreadId() 跟 GetCurrentProcessId(): 一个是获取进程ID,一个是线程ID 那么我们利用...

weixin_30414305的博客 692

TEB和PEB

TEB(Thread Environment Block,线程环境块) 线程环境块中存放着进程中所有线程的各种信息 TEB的访问方法 ntdll.NtCurrentTeb() 函数用来返回当前线程的TEB结构体指针 NtCurrentTeb() 函数所返回的结构体指针即为 fs:[0x18] 的值,里面的值即为TEB的结构体指针,fs:[0]的值即为TEB的起始地址 nt!_TEB ...

南宫封清的博客 3803

8.1 TEB与PEB概述

在开始使用`TEB/PEB`获取进程或线程ID之前,我想有必要解释一下这两个名词,PEB指的是进程环境块`(Process Environment Block)`,用于存储进程状态信息和进程所需的各种数据。每个进程都有一个对应的`PEB`结构体。TEB指的是线程环境块`(Thread Environment Block)`,用于存储线程状态信息和线程所需的各种数据。每个线程同样都有一个对应的`TEB`结构体。PEB中包含了进程的代码、数据段指针、进程的环境变量、进程启动参数信息以及加载的dll信息等。P

微软技术分享 9321

TEB/PEB定位PE文件导入导出表

文章目录TEB/PEB定位PE文件导入导出表TEB-线程环境块PEB-进程环境块定位导入导出表 TEB/PEB定位PE文件导入导出表 基本思路: TEB/PEB定位PE文件基址 通过FS寄存器找到当前的TEB 通过[TEB+0x30]找到PEB的地址 通过[PEB+0x0C]找到PEB_LDR_DATA的结构体指针 通过[PEB_LDR_DATA+0x1C]找到此结构体的成员InInitiali...

w_g3366的博客 2135

TEB PEB

PEB 1 typedef struct _PEB 2 { 3 UCHAR InheritedAddressSpace; // 00h 4 UCHAR ReadImageFileExecOptions; // 01h 5 UCHAR BeingDebugged; // 02h 6 UCHAR Spare; // 03h ...

179

【免杀前置课——shellcode】二十二、使用PEB TEB查找核心模块Kernel32.dll user32.dll ntdll.dll,什么是PEB,TEB?通杀shellcode的思路

【免杀前置课——shellcode】二十二、使用PEB TEB查找核心模块Kernel32.dll user32.dll ntdll.dll,什么是PEB,TEB?通杀shellcode的思路

m0_62783065的博客 673
上一篇: 软件保护壳技术专题 - 反调试器技术
下一篇: 加密资源节
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值