본문 바로가기
reversing

TEB

by 코끼리_땃쥐 2022. 9. 16.
반응형

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

댓글