作 者: 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;
*******************************************************
相关推荐
TEB结构思考
在网上看到的一篇文章如下: TEB与PEB的结构分析,如阿燐燐所诉FS寄存器指向当前活动线程的TEB结构(线程结构) 用OD打开一个任意程序可以看到FS段寄存器的状况,其中选择子是003B,在GDT中的起始位置是7FFDF000,大小是00FFFFFF,是一个RING3的调用门。 在数据窗口中跟踪7FFDF000然后以长型地址的方式查看数据,可以完整的看到TEB结构 ,
TEB(线程环境块)学习
文章目录TEBTEB结构中的两个重要成员NtTib成员PEB成员PEB.BeingDebuggedPEB.ImageBaseAddressPEB.LdrPEB.ProcessHeap & PEB.NtGolbalFlag TEB TEB结构中的两个重要成员 +0x000 NtTib :_NT_TIB . . . +0x30 ProcessEnvironmentBlock ...
从公式到实践:用SPSS解锁香农多样性指数的生态洞察
本文详细介绍了如何利用SPSS软件计算和应用香农多样性指数进行生态研究。从基础公式解析到SPSS实战操作,再到生态决策支持,全面展示了该指数在物种丰富度和均匀度量化中的价值。文章特别强调了SPSS操作中的关键技巧和常见误区,为生态研究者提供了一套完整的分析解决方案。
如何使用windbg查看C#某个线程的栈大小 ?
每一个线程都有一个叫的线程环境块数据结构,这个结构中有一个叫做NT_TIB的结构,它里面有两个字段分别为StackBase和StackLimit,前面叫做,也就是栈顶,后者叫做,因为栈空间是向小地址增长的,所以用就能算出所谓的栈内存大小,接下来我们用windbg演示一下。......
用Docker-Compose三节点部署生产级Doris集群:从配置文件到故障转移
本文详细介绍了如何使用Docker-Compose部署一个生产级的三节点Apache Doris集群。内容涵盖从核心架构理解、配置文件编写到集群初始化验证的全过程,并重点讲解了如何实现高可用、数据持久化、健康检查以及故障转移等生产级运维关键点,为中小团队提供了一种在容器化便利性与系统稳定性间取得平衡的可靠部署方案。
trae使用playwright MCP方法流程
trae使用playwright MCP方法流程
加载配置信息
加载配置信息 加载配置信息最初只用在Windows NT操作系统中,作为文件头部的延伸部分,后来被用做异常处理 加载配置信息表中红存放了基于结构化异常处理(Structureed Exception Handling,SEH)技术的各种异常句柄。当程序运行发生异常后,操作系统会根据异常类别对异常进行分发处理,并根据这些句柄实施程序流程的转向,保证系统能从异常中全身而退 定义 PE中的加载配置信息储存在一个名为加载配置结构(Load Configuration Structure)的数据结构中。加载配置结构是
DPABINet保姆级教程:零代码完成脑网络分析与图论计算
本文提供DPABINet的零代码脑网络分析全流程指南。该工具通过图形化界面集成时间序列提取、连接矩阵构建、图论指标计算及统计分析,大幅降低技术门槛。重点解析了阈值选择、二值化与小世界属性计算等关键步骤,帮助研究者快速掌握脑网络分析与图论计算,提升科研效率与可重复性。
Win32 系统线程信息块(TIB)浅析
<br />作者:Matt Pietrek<br /> 编译:VCKBASE <br />原文出处:May 1996 Under The Hood<br /><br /> Windows 操作系统各个版本之间虽然核心部分差异很大,但它们都共享一个关键的系统数据结构,许多程序员都没有加以关注。更精确地说,这种共享是针对此数据结构的某 些域。先不说差别,这个结构被广泛使用,甚至是被编译器产生的代码存取。没错,你的C++编译器产生代码
深入SVT SPI VIP配置:如何灵活控制CS间隔、数据帧大小与时钟频率(含代码片段)
本文深入探讨了SVT SPI VIP的高级配置技巧,包括精确控制CS信号间隔、突破数据帧大小限制以及动态时钟频率切换。通过实战代码片段和详细配置步骤,帮助验证工程师灵活应对复杂SPI协议验证场景,提升验证效率和覆盖率。特别适合需要处理非标准SPI时序和特殊数据帧的芯片验证项目。
江科大51单片机笔记【1】单片机及开发板介绍
单片机,Micro Controller Unit,简称MCU,内部集成了CPU、RAM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能单片机的任务是信息采集(传感器)、处理(CPU)和硬件设备(电机、LED)的控制单片机算是一个袖珍版计算机,是一个完整的计算机系统,成本低体积小结构简单单片机的使用领域:智能仪表、实时工控、通讯设备、导航系统、家用电器等。
常用的静态反调试技术及其规避方法
静态反调试虽然容易绕过,但是由于种类繁多,如果病毒结合了很多种静态反调试而对其了解不多的话,也不好办,所以了解更多的 方法不至于束手无策. 1.利用PEB的BeingDebugged 字段 已知fs:[0x30]指向PEB, PEB地址+0x2 处的一个字节的数据表示是否在被调试,如果是1则是,0则不是 当进程被附加时,系统会将该值置为1 IsDebuggerPresent() ...
x86架构学习之中断
外部中断,一般是由CPU的外部引脚电信号触发,这些引脚留给硬件厂商去定义中断,例如主板厂商可以将USB中断挂载70号中断引脚上,MCU厂商可以将片上外设(SPI、I2C等)的中断挂载在指定中断线上。中断描述符主要用于说明该中断的入口地址,中断描述符表则是将中断描述符一项一项管理在一个数组中,每一项中断描述符占用8个字节(64位模式下,占用16字节),其。简称中断,后文如果没特别说明,中断都指外部中断,由外部IO事件触发,由于时钟源来自CPU外部,与CPU时钟不同源,因此是异步事件。
FS TIB TEB PEB
本篇发表我的TEB 和 PEB的一些见解,我把它图形化了,更形象便于理解。 首先对于TIB TEB PEB的概念我引用一下别人的blog了,以下内容取自看雪: TEB(Thread Environment Block,线程环境块):系统在此TEB中保存频繁使用的线程相关的数据
基于 ESP32 的宿舍洗浴热水余量预测与智能排队提醒系统设计与实现
本系统以 ESP32 为主控核心,通过超声波液位传感器实时监测储热水箱剩余水量,配合 DS18B20 温度传感器采集水温数据,建立热水余量预测模型估算可用洗浴时长;同时通过红外人体传感器统计浴室排队人数,结合人均洗浴时长计算预计等待时间,并通过 OLED 屏本地显示 + WiFi Web 服务器远程推送的方式实现排队提醒功能。
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
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
TEB
TEB指线程环境块,该结构体包含进程中运行线程的各种信息,进程中的每个线程都对应一个TEB结构体。 Windows7中的TEB结构体成员。 +0x000 NtTib : _NT_TIB +0x01c EnvironmentPointer : Ptr32 Void +0x020 ClientId : _CLIENT_ID //进程的pid +0x028 ActiveRpcHandle : Ptr3.
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:[
PEB和TEB资料整合
一、概念 TEB(Thread Environment Block,线程环境块)系统在此TEB中保存频繁使用的线程相关的数据。位于用户地址空间,在比 PEB 所在地址低的地方。进程中的每个线程都有自己的一个TEB。一个进程的所有TEB都以堆栈的方式,存放在从0x7FFDE000开始的线性内存中,每 4KB为一个完整的TEB,不过该内存区域是向下扩展的。在用户模式下,当前线程的TEB位于独立的...
Win32之隐藏DLL隐藏模块技术
Win32之隐藏DLL隐藏模块技术 这一讲涉及到windows底层技术.跟汇编内容. 我们才可以实现模块隐藏(也称为DLL隐藏) 一丶API反汇编勾引兴趣 我们都用过Windows的进程跟线程API 也就是 GetCurrentThreadId() 跟 GetCurrentProcessId(): 一个是获取进程ID,一个是线程ID 那么我们利用...
TEB和PEB
TEB(Thread Environment Block,线程环境块) 线程环境块中存放着进程中所有线程的各种信息 TEB的访问方法 ntdll.NtCurrentTeb() 函数用来返回当前线程的TEB结构体指针 NtCurrentTeb() 函数所返回的结构体指针即为 fs:[0x18] 的值,里面的值即为TEB的结构体指针,fs:[0]的值即为TEB的起始地址 nt!_TEB ...
8.1 TEB与PEB概述
在开始使用`TEB/PEB`获取进程或线程ID之前,我想有必要解释一下这两个名词,PEB指的是进程环境块`(Process Environment Block)`,用于存储进程状态信息和进程所需的各种数据。每个进程都有一个对应的`PEB`结构体。TEB指的是线程环境块`(Thread Environment Block)`,用于存储线程状态信息和线程所需的各种数据。每个线程同样都有一个对应的`TEB`结构体。PEB中包含了进程的代码、数据段指针、进程的环境变量、进程启动参数信息以及加载的dll信息等。P
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...
TEB PEB
PEB 1 typedef struct _PEB 2 { 3 UCHAR InheritedAddressSpace; // 00h 4 UCHAR ReadImageFileExecOptions; // 01h 5 UCHAR BeingDebugged; // 02h 6 UCHAR Spare; // 03h ...
【免杀前置课——shellcode】二十二、使用PEB TEB查找核心模块Kernel32.dll user32.dll ntdll.dll,什么是PEB,TEB?通杀shellcode的思路
【免杀前置课——shellcode】二十二、使用PEB TEB查找核心模块Kernel32.dll user32.dll ntdll.dll,什么是PEB,TEB?通杀shellcode的思路
4860



被折叠的 条评论
为什么被折叠?



