TEB特点
- 一个进程可能同时有多个线程
- 每个线程都有一个线程环境块TEB
- 第一个TEB开始于0x7FFDE000
- 之后新建的线程的TEB将紧随前边的TEB,之间相隔0x100字节,并向内存地址方向
- 线程退出时,对应的TEB也被销毁,腾出的TEB空间被新建的线程重复使用。
线程环境块的预测图:
TEB结构
由于TEB才是初学,对里面的很多结构都不怎么了解,写这一节主要是为了贴一张图,方便以后补充!
当然为了充实被本篇博客,笔者提供几个小程序:
int GetThreadId()
{
int ithread = 0;
_asm{
xor esi , esi
mov eax, fs:[esi+18h]
mov ecx, [eax+ 20h]
mov eax, [eax+ 24h]
mov dword ptr[ithread], eax
}
return ithread;
}
int GetProcessId()
{
int iProcess = 0;
_asm{
xor esi , esi
mov eax, fs:[esi+18h]
mov ecx, [eax+ 20h]
mov eax, [eax+ 24h]
mov dword ptr[iProcess ], ecx
}
return iProcess;
}