TEB
TEB는 프로세스에서 실행되는 스레드에 대한 정보를 담고 있는 구조체입니다.
스레드별로 TEB구조체가 하나씩 할당됩니다. 또한 TEB구조체는 OS종류별로 그 모양이 조금씩 달라지며 세부적인 내용에 대해서는 문서화되어 있습니다.
TEB 구조체 정의
typedef struct _TEB {
PVOID Reserved1[12];
PPEB ProcessEnvironmentBlock;
PVOID Reserved2[399];
BYTE Reserved3[1952];
PVOID TlsSlots[64];
BYTE Reserved4[8];
PVOID Reserved5[26];
PVOID ReservedForOle;
PVOID Reserved6[4];
PVOID TlsExpansionSlots;
} TEB, *PTEB;
중요 멤버
ProcessEnvironmentBlock 멤버를 보겠습니다.
이 값은 PEB(Process Environment Block) 구조체의 포인터입니다. PEB는 프로세스 별로 하나만 생성됩니다.
NtTib 멤버
TEB 구조체의 첫 번째 멤버는 _NT_TIB 구조체입니다.
typedef struct _NT_TIB{
struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
PVOID StackBase;
PVOID StackLimit;
PVOID SubSystemTib;
union {
PVOID FiberData;
DWORD Version;
};
PVOID ArbitraryUserPointer;
struct _NT_TIB *Self;
} NT_TIB;
typedef NT_TIB *PNT_ITB;
ExceptionList 멤버는 _EXCEPTION_REGISTRATION_RECORD 구조체 연결리스트를 가지고 있습니다. 이것은 SEH(structcured Exception Handler)라고 하는 windows OS의 예외 처리 메커니즘에 사용됩니다. Self멤버는 _NT_TIB 구조체의 셀프 포인터 입니다. 이는 곧 TEB구조체 포인터이기도 합니다.
'reversing' 카테고리의 다른 글
NtQueryInformationProcess (0) | 2022.09.29 |
---|---|
IA-32 Instruction 포맷 (0) | 2022.09.27 |
TLS CALLBACK (0) | 2022.08.31 |
CreateRemoteThread() API 호출 흐름 (0) | 2022.08.29 |
Session in Kernel 6 (0) | 2022.08.29 |
댓글