TEB结构、PEB结构
本帖最后由 幻影梦魇 于 2010-12-9 18:02 编辑[*]TEB结构
//
// Thread Environment Block (TEB)
//
typedef struct _TEB
{
NT_TIB Tib; /* 00h */
PVOID EnvironmentPointer; /* 1Ch */
CLIENT_ID Cid; /* 20h */
PVOID ActiveRpcHandle; /* 28h */
PVOID ThreadLocalStoragePointer; /* 2Ch */
struct _PEB *ProcessEnvironmentBlock; /* 30h */
ULONG LastErrorValue; /* 34h */
ULONG CountOfOwnedCriticalSections; /* 38h */
PVOID CsrClientThread; /* 3Ch */
struct _W32THREAD* Win32ThreadInfo; /* 40h */
ULONG User32Reserved; /* 44h */
ULONG UserReserved; /* ACh */
PVOID WOW32Reserved; /* C0h */
LCID CurrentLocale; /* C4h */
ULONG FpSoftwareStatusRegister; /* C8h */
PVOID SystemReserved1; /* CCh */
LONG ExceptionCode; /* 1A4h */
struct _ACTIVATION_CONTEXT_STACK *ActivationContextStackPointer; /* 1A8h */
UCHAR SpareBytes1; /* 1ACh */
GDI_TEB_BATCH GdiTebBatch; /* 1D4h */
CLIENT_ID RealClientId; /* 6B4h */
PVOID GdiCachedProcessHandle; /* 6BCh */
ULONG GdiClientPID; /* 6C0h */
ULONG GdiClientTID; /* 6C4h */
PVOID GdiThreadLocalInfo; /* 6C8h */
ULONG Win32ClientInfo; /* 6CCh */
PVOID glDispatchTable; /* 7C4h */
ULONG glReserved1; /* B68h */
PVOID glReserved2; /* BDCh */
PVOID glSectionInfo; /* BE0h */
PVOID glSection; /* BE4h */
PVOID glTable; /* BE8h */
PVOID glCurrentRC; /* BECh */
PVOID glContext; /* BF0h */
NTSTATUS LastStatusValue; /* BF4h */
UNICODE_STRING StaticUnicodeString; /* BF8h */
WCHAR StaticUnicodeBuffer; /* C00h */
PVOID DeallocationStack; /* E0Ch */
PVOID TlsSlots; /* E10h */
LIST_ENTRY TlsLinks; /* F10h */
PVOID Vdm; /* F18h */
PVOID ReservedForNtRpc; /* F1Ch */
PVOID DbgSsReserved; /* F20h */
ULONG HardErrorDisabled; /* F28h */
PVOID Instrumentation; /* F2Ch */
PVOID SubProcessTag; /* F64h */
PVOID EtwTraceData; /* F68h */
PVOID WinSockData; /* F6Ch */
ULONG GdiBatchCount; /* F70h */
BOOLEAN InDbgPrint; /* F74h */
BOOLEAN FreeStackOnTermination; /* F75h */
BOOLEAN HasFiberData; /* F76h */
UCHAR IdealProcessor; /* F77h */
ULONG GuaranteedStackBytes; /* F78h */
PVOID ReservedForPerf; /* F7Ch */
PVOID ReservedForOle; /* F80h */
ULONG WaitingOnLoaderLock; /* F84h */
ULONG SparePointer1; /* F88h */
ULONG SoftPatchPtr1; /* F8Ch */
ULONG SoftPatchPtr2; /* F90h */
PVOID *TlsExpansionSlots; /* F94h */
ULONG ImpersionationLocale; /* F98h */
ULONG IsImpersonating; /* F9Ch */
PVOID NlsCache; /* FA0h */
PVOID pShimData; /* FA4h */
ULONG HeapVirualAffinity; /* FA8h */
PVOID CurrentTransactionHandle; /* FACh */
PTEB_ACTIVE_FRAME ActiveFrame; /* FB0h */
PVOID FlsData; /* FB4h */
UCHAR SafeThunkCall; /* FB8h */
UCHAR BooleanSpare; /* FB9h */
} TEB, *PTEB; [*]PEB结构
typedef struct _PEB
{
UCHAR InheritedAddressSpace; // 00h
UCHAR ReadImageFileExecOptions; // 01h
UCHAR BeingDebugged; // 02h
UCHAR Spare; // 03h
PVOID Mutant; // 04h
PVOID ImageBaseAddress; // 08h
PPEB_LDR_DATA Ldr; // 0Ch
PRTL_USER_PROCESS_PARAMETERS ProcessParameters; // 10h
PVOID SubSystemData; // 14h
PVOID ProcessHeap; // 18h
PVOID FastPebLock; // 1Ch
PPEBLOCKROUTINE FastPebLockRoutine; // 20h
PPEBLOCKROUTINE FastPebUnlockRoutine; // 24h
ULONG EnvironmentUpdateCount; // 28h
PVOID* KernelCallbackTable; // 2Ch
PVOID EventLogSection; // 30h
PVOID EventLog; // 34h
PPEB_FREE_BLOCK FreeList; // 38h
ULONG TlsExpansionCounter; // 3Ch
PVOID TlsBitmap; // 40h
ULONG TlsBitmapBits; // 44h
PVOID ReadOnlySharedMemoryBase; // 4Ch
PVOID ReadOnlySharedMemoryHeap; // 50h
PVOID* ReadOnlyStaticServerData; // 54h
PVOID AnsiCodePageData; // 58h
PVOID OemCodePageData; // 5Ch
PVOID UnicodeCaseTableData; // 60h
ULONG NumberOfProcessors; // 64h
ULONG NtGlobalFlag; // 68h
UCHAR Spare2; // 6Ch
LARGE_INTEGER CriticalSectionTimeout; // 70h
ULONG HeapSegmentReserve; // 78h
ULONG HeapSegmentCommit; // 7Ch
ULONG HeapDeCommitTotalFreeThreshold; // 80h
ULONG HeapDeCommitFreeBlockThreshold; // 84h
ULONG NumberOfHeaps; // 88h
ULONG MaximumNumberOfHeaps; // 8Ch
PVOID** ProcessHeaps; // 90h
PVOID GdiSharedHandleTable; // 94h
PVOID ProcessStarterHelper; // 98h
PVOID GdiDCAttributeList; // 9Ch
PVOID LoaderLock; // A0h
ULONG OSMajorVersion; // A4h
ULONG OSMinorVersion; // A8h
ULONG OSBuildNumber; // ACh
ULONG OSPlatformId; // B0h
ULONG ImageSubSystem; // B4h
ULONG ImageSubSystemMajorVersion; // B8h
ULONG ImageSubSystemMinorVersion; // C0h
ULONG GdiHandleBuffer; // C4h
PVOID ProcessWindowStation; // ???
} PEB, *PPEB;
转自pediy 简单说个例子MOV EAX,FS: 获得TEB指针送EAX,MOV EAX,DS:, CLIENT_ID Cid; 获得进程PID送EAX。 MOV EAX,FS: 这一句没看懂,然后到网上搜一下,找到如下资料,然后懂了……
FS寄存器指向当前活动线程的TEB结构(线程结构)
偏移说明
000指向SEH链指针
004线程堆栈顶部
008线程堆栈底部
00CSubSystemTib
010FiberData
014ArbitraryUserPointer
018FS段寄存器在内存中的镜像地址
020进程PID
024线程ID
02C指向线程局部存储指针
030PEB结构地址(进程结构)
034上个错误号 本帖最后由 幻影梦魇 于 2010-12-10 01:36 编辑
准确的来说FS:是TEB结构的指针这个指针指向 TEB结构
MOV EAX,FS: 用OD 在数据窗口中跟踪EAX 然后选择长型-地址方式显示数据 可以看到TEP结构
除了TEB和PEB SEH的异常处理也蛮神奇的 FS: 本帖最后由 眠羽 于 2010-12-10 01:10 编辑
能讲解一下,这个能干什么吗?
PS:还有,请善用编辑功能,不要连贴,否则会有妖怪来吃你。。。 妖怪0.0 好卡帕 - = 这么长,而且这是什么? 连我这只学计算机的生物都看不懂。。 不愧为技术宅吗。。 我也是看雪转的,大致的意思就是FS:记录的一个数据结构。PEB包含在TEB中偏移是0x30
有时间会写一个详细的过程。
---------我是渣包 MOV EAX,FS: 这一句没看懂,然后到网上搜一下,找到如下资料,然后懂了……
FS寄存器指向当前 ...
阿燐燐 发表于 2010-12-9 21:05 http://bbs.nyasama.com/images/common/back.gif
TEB与PEB的结构分析,如阿燐燐所诉FS寄存器指向当前活动线程的TEB结构(线程结构)
用OD打开一个任意程序可以看到FS段寄存器的状况,其中选择子是003B,在GDT中的起始位置是7FFDF000,大小是00FFFFFF,是一个RING3的调用门。
在数据窗口中跟踪7FFDF000然后以长型地址的方式查看数据,可以完整的看到TEB结构,
而FS:则是TEB 7FFDF000的指针。
FS:
FS:
都是FS:结构中的一部分。
在程序初始化的过程中,FS在GDT中得到一个大小是00FFFFFF,起始位置为7FFDF000可以被RING3权限程序控制的地址空间。并且把程序的一些线程和进程信息存放在此处。
而整个表的指针放在FS:中。
页:
[1]
2